SQL - INSERT INTO
-
Hallo,
ich habe ein Probleme mit einer Access Datenbank. Ich habe eine
Konsolenanwendung in VC++6 geschrieben die Integer Variablen in die
Datenbank via SQL Befehle reinpacken sollen. Also von SQL habe ich eingendlich
Überhaupt keine Ahnung!!! Ich habe zuerst mit SQLAllocEnv die ODBC Umgebung reserviert und dann mit SQLAllocConnect Speicher reserviert. Dann weiter gemacht mit SQLConnect und SQLAllocStmt.Wie kann ich mit dem INSERT INTO Befehl die Daten dort reinbekommen??
Habt ihr vielleicht ein Beisp. Source Code?
Vielen Dank für eure Hilfe!
-
Du könntest auch die MFC DB Klassen nutzen.
http://download.pearsoned.de/leseecke/VCPLUS6_21Tg/data/start.htm
Tag 14Ansonsten müsste es mit dem
SQLExecDirect(hStmt, (UCHAR*)"INSERT INTO tab VALUES('Wert');", SQL_NTS);
befehl gehen.
-
Hi,
erstmal vielen Dank für deine Antwort, aber genau so habe ich es bereits mal
ausprobiert und es klap
tt nix!Ich habe eine ACCESS Datenbank mit 3 Spalten und alle sind vom Typ Zahl.
Hab sie in ODBC als Datenquelle mit dem Name "sql1" eingebunden.Es scheint auf alle Fälle alles zu laufen, also alle printfs werden ausgeführt
aber in der Access Datenbank regt sich nix!#include <windows.h> #include <sqlext.h> #include <stdio.h> #include <sql.h> #include <string.h> //Fehlervariable SQLRETURN retcode; //Umgebungshandle HSTMT hstmt = NULL; HDBC hdbc = NULL; HENV henv = NULL; int jahr; int monat; int tag; SDWORD id; void main(void) { //Startet eine ODBC-Umgebung. retcode = SQLAllocEnv(&henv); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("jo, SQLAllocEnv laeuft!!!\n"); } retcode = SQLAllocConnect(henv, &hdbc); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("jo, SQLAllocConnect laeuft!!!\n"); } retcode = SQLConnect(hdbc, (UCHAR FAR *)"sql1", SQL_NTS, NULL,0,NULL,0); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("jo, SQLConnect laeuft!!!\n"); } retcode = SQLAllocStmt(hdbc, &hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("jo, SQLAllocStmt laeuft!!!\n"); } retcode = SQLPrepare(hstmt, (UCHAR FAR *) "INSERT INTO Tabelle1 (tag,monat,jahr) VALUES (?, ?, ?)", SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("\nPrepare laueft\n"); } SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &id, 0, NULL); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &id, 0, NULL); SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &id, 0, NULL); id=5; retcode = SQLExecute(hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("Execute laeuft!!!\n"); } retcode = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { printf("EndTran laeuft\n"); } }
Habe ich irgendwas vergessen?? Oder Falsch aufgerufen???
Vielen Dank für eure Hilfe!!!
(Edit von estartu_de: Wenn du Code-Tags verwenden willst, schalte nicht den BBCode ab. Das ist das oberste Häkchen.)
-
vielleicht bin ich jetzt grad falsch drauf aber versuchst du in ein Feld vom Typ NUMBER ein ? einzufügen? Und warum machst du drei Felder Tag monat Jahr warum kein Datumsfeld?
-
Hi,
das hab ich erstmal nur zum Test so gemacht, wollte nur versuchen 3 Int
Variablen in eine Access Datenbank via SQL Befehle zu packen.Soviel wie ich gelesen habe ist das mit dem ? nur ein Platzhalter für Variablen.
-
Das mit dem Platzhalter stimmt schon, aber es ist nur ein Platzhalter für ein Kriterium bei einer WHERE-Klausel. (? für ein Zeichen an der Position des ? in der Zeichenkette - % für eine Zeichenkette variabler Länge).
Beim Einfügen in die Tabelle musst du schon konkrete Werte angeben.
-
ok, danke! Aber wie würde denn die Änderung im Source Code aussehen?