vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Franki
Datum: 08.12.11 01:19

Hallo Manuel,

ja es gibt viele Möglichkeiten Datensätze in eine DB zu schreiben. Das wird dir aber nicht wirklich helfen, wenn du dich nicht mit den Grundlagen beschäftigst und nur Beispielcode aus dem Internet versuchst auf deine Zwecke anzupassen.

Für die ersten Versuche brauchst du ADOX überhaupt nicht, nimm einfach für deine Tests eine vorhandene *.mdb mit den entsprechenden Tabellen.

Diese setzt du z.B. per Access auf die entsprechenden Eigenschaften (Integer / Text in diesem Fall)

Dann wirst du bei einem simplen Beispielprojekt sehr schnell erkennen, dass man keine Texte in ein "Zahlenfeld" schreiben kann. Also bei festen Werten entweder die Anfürhungszeichen weg lassen oder mit CINT umwandeln. Dieser Tipp ist aber auch nur eine Krücke, denn spätestens wenn du mal mit Datum- oder Uhrzeitangaben arbeitest wird das wieder krachen gehen wenn die Datentypen nicht stimmen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Basic_Need
Datum: 07.12.11 23:45

Hallo an alle,

bastle gerade daran, für ein Projekt in eine Datenbank zu schreiben. Ich habe es geschafft, über ADOX einen Katalog zu erstellen, mit 1 Tabelle und 2 Spalten. Nun möchte ich gerne Werte in die Datenbank schreiben.

Benutze: WIN XP Pro SP 3; VB 6

Code:
    Dim Katalog2 As New ADOX.Catalog
    Dim Tabelle2 As New ADOX.Table
    Dim Spalte1 As New ADOX.Column
    Dim Spalte2 As New ADOX.Column
 
    Katalog2.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\Output.mdb"
 
 
    Tabelle2.Name = "Output"
    Katalog2.Tables.Append Tabelle2
    Spalte1.Name = "Feld2"
    Katalog2.Tables("Output").Columns.Append Spalte1, adInteger
    Spalte2.Name = "Feld1"
    Katalog2.Tables("Output").Columns.Append Spalte2, adVarChar, 1
 
Dim Datenbank2 As New ADODB.Connection
Set Datenbank2 = Katalog2.ActiveConnection
 
Datenbank2.Execute "INSERT INTO Output VALUES ('1','2');"
Leider sagt er mir "Syntaxfehler in der INSERT INTO-Anweisung". Ist es wirklich ein Fehler in der Anweisung? Oder liegt es an etwas Anderem? Brauche ich noch ein zusätzliches Programm? Gibt es evtl. eine andere Möglichkeit, um Datensätze in die Datenbank zu schreiben?


Vielen Dank im Voraus
Manuel

Beitrag wurde zuletzt am 07.12.11 um 23:50:23 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Basic_Need
Datum: 08.12.11 02:06

Hi Frank,

gebe zu, dass die Eigenschaft ein Fehler war (Integer/Text), allerdings scheint es nicht daran zu liegen.

Es scheint mir, dass es etwas mit den ADOX-Elementen zu tun hat. Denn: Mit einer anderen Datenbank funktioniert es. Mit meiner selbst-kreierten allerdings nicht... - kann es sein, dass mich dabei die Vergangenheit doch wieder einholt? Da ich keinen Verweis auf ADOX setzen konnte, und es jetzt getürkt habe?

Danke trotzdem soweit
Manuel

Beitrag wurde zuletzt am 08.12.11 um 02:14:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: wb-soft
Datum: 08.12.11 10:36

Hi!

Eigenlich sieht es hier nicht nach einem Problem mit den Verweisen aus.

Wenn du Access zur Verfügung hast, solltest du tatsächlich die DB damit erstellen. Außerdem kannst du auch testen, ob eine mit ADOX erstellte DB deinen Erwartungen entspricht.
Dabei ist zu beachten, daß VB6 standardmäßig eine DB in der Version von Access97 erstellt. Beim Dateiformat ab Access2007 ist ein anderer Connectionstring erforderlich.

Als Einsteiger ist es leichter, Daten über ein Recordset zu bearbeiten. Das ist vom Code her besser lesbar.

Auch von mir die Empfehlung, zuerst einige Grundlagen zu lernen. Wenn du Material brauchst melde dich per Mail.

Und wie gesagt: Im Zweifelsfall VB6 + Servicepack neu installieren.


mfg

WB
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Franki
Datum: 09.12.11 01:45

Hallo Manuel,

ich glaube weniger, dass an dem Verweisproblem liegt.
Aber unabhängig davon, taste dich doch mal schrittweise an das Problem heran. Zuerst lässt du ADOX komplett weg und nimmst eine per Access erstellte DB. Erst dann wenn du sicher beherrschst, wie du per VB da Daten rein schreiben, auslesen, ändern, löschen kannst (Grundlagen), dann solltest du dich damit beschäftigen wie du per ADOX neue Tabellen erzeugen kannst.

Andere Frage: Warum brauchst du das überhaupt in deinem Programm?
Ich habe das immer so gemacht, dass ich den Kunden beim Setup eine "leere" *mdb mitgeliefert habe die alle notewendigen Tabellen enthält, aber keine Datensätze darin. Da kann der User dann sofort mit arbeiten.

Erst wenn Updates kommen und somit neue Tabellen notwendig wurden, habe ich ADOX verwendet um diese zu erzeugen. Also bei der ersten Notwendigkeit aus dem Programm heraus prüfen, ob es die Tabelle gibt, wenn nicht, dann halt anlegen. Aber auch erst dann.

Der Tipp von wb-Soft mit den Recordsets solltest du beherzigen, das ist wirklich einfacher, und je nach Anwendung auch besser.

Also Abschlussfrage: Warum ist es zwingend notwendig aus deinem Programm heraus neue Tabellen erstellen zu können?

Gruß,
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Basic_Need
Datum: 09.12.11 17:17

Hallo nochmals,

also ich habe jetzt erst einmal deinen Vorschlag beherzigt, habe Werte in eine andere Tabelle geschrieben. Dieses Programm ist nicht für mich, sondern ich muss es im Rahmen einer Projektarbeit abgeben. Da kommt es blöd, wenn man dann sagt, die Leute müssten erst eine eigene Datenbank erstellen, die dann - sofern alle Spalten und Tabellen richtig benannt, gefüllt werden kann.

Um dieses Problem zu umgehen, habe ich nun folgendes gemacht. Ein Datenbankmuster angelegt, das bei Start des Programmes einfach kopiert wird. In dieses wird dann der Output reingeschrieben. Somit habe ich also deinen Tipp, erst einmal klein anzufangen, beherzigt.

Und somit hat der "Kunde" nichts mehr zu meckern, und ich bin auch zufrieden. Allerdings sollte ich meine Wissenslücke bzgl. Datenbank & VB noch füllen.

Ich danke demnach mal ganz herzlich.

MfG
Manuel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: Franki
Datum: 10.12.11 03:44

Hallo,

Zitat:


also ich habe jetzt erst einmal deinen Vorschlag beherzigt,
habe Werte in eine andere Tabelle geschrieben. Dieses
Programm ist nicht für mich, sondern ich muss es im Rahmen
einer Projektarbeit abgeben.


Ok, dann geht es eher um die Theorie und nicht die Praxis

Zitat:


Um dieses Problem zu umgehen, habe ich nun folgendes gemacht.
[...]


Ja, du hast den praktischen Teil der Löstunge gewählt.

Zitat:


Und somit hat der "Kunde" nichts mehr zu meckern,
und ich bin auch zufrieden. Allerdings sollte ich meine
Wissenslücke bzgl. Datenbank und VB noch füllen.


Ok das stimmt schon, aber meine Antwort bzw. mein Vorschlag könnte dennoch falsch sein. Denn eine rein akademische Lösung war das nicht, es könnte sein, dass das anders bewertet wird.

Und ja, Grundlalgen zu lernen ist immer wichtig und sinnvoll, egal ob für die Praxis oder Schule / Studium usw.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADODB: Ececute - Syntaxfehler in SQL-Anweisung? 
Autor: bfritz
Datum: 10.12.11 22:27

Hallo Basic_Need

Du hast leider einen Syntaxfehler in der SQL-Anweisung:
Datenbank2.Execute "INSERT INTO Output VALUES ('1','2');"
Erklärung: Der gewählte Tabellenname("Output") ist in MS Access ein reservierter Name
und muß daher in eckigen Klammern gesetzt werden.

Der nachfolgende Code sollte aber funktionieren:
    Dim cnn As New ADODB.Connection
    Dim cat As New ADOX.Catalog
    Dim tbl As New Table
 
    cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & App.Path & "\Output.mdb"
    tbl.Name = "Output"
    tbl.Columns.Append "Feld1", adInteger
    tbl.Columns.Append "Feld2", adVarWChar, 50
    cat.Tables.Append tbl
    Set cnn = cat.ActiveConnection
    cnn.Execute "INSERT INTO [Output]([Feld1],[Feld2]) VALUES (1,'2');"
 
    cnn.Close
    Set cnn = Nothing
LG bfritz
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel