PDA

Visualizza la versione completa : [C] Inserimento in Access tramite SQL di INSERT


vian85
12-06-2008, 19:48
io sto lavorando in linguaggio C per una tesina di una materia e sto avendo un problema mando una stringa di sql, per interagire con databases access ma il delete funziona ho il riscontro , l'update idem ma insert no, mi compila esegue esattamente il codice ma appena vedo il database non ha inserito niente
come lo devo risolvere rispondetemi anche in caso negativo

grazie!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!

MacApp
12-06-2008, 19:52
dalle info che hai dato nulla ti si puo' consigliare per cercare di aiutarti nello risolvere il tuo problema.

Alex'87
12-06-2008, 19:53
Senza codice non possiamo aiutarti :fagiano:

Azzardo un'ipotesi... Lo fai il commit? :stordita:

oregon
12-06-2008, 20:32
Originariamente inviato da vian85
io sto lavorando in linguaggio C

Intanto sarebbe il caso di leggere e rispettare il regolamento prima di postare ...

In secondo luogo, secondo me, non hai scritto correttamente la INSERT ... ma dato che non hai mostrato NULLA ... ne' codice ne' frasi SQL ... diciamo che ci vorrebbe la classica "sfera di cristallo" ...

vian85
12-06-2008, 23:07
scusate questo tutto il codice:


int main(void)
{

HENV hEnv = NULL; // Env Handle from SQLAllocEnv()
HDBC hDBC = NULL; // Connection handle
HSTMT hStmt = NULL; // Statement handle
UCHAR szDSN[SQL_MAX_DSN_LENGTH] = "parcheggio2"; // Data Source Name buffer "ACCESSdb"
UCHAR* szUID = NULL; // User ID buffer
UCHAR* szPasswd = NULL; // Password buffer
UCHAR szModel[6][128]; // Model buffer
SDWORD cbModel[ 6 ]; // Model buffer bytes recieved
//UCHAR szSqlStr[] = "delete * from accessi where IdAccessi = '3'"; // SQL string
UCHAR szSqlStr[120] = "insert into accessi values (4,'Baglio','Aldo',29,'cliente')"; // SQL string
//UCHAR szSqlStr[] = "UPDATE accessi SET nome = 'manuela' where IdAccessi = '4'"; // SQL string
//UCHAR szSqlStr[] = "UPDATE accessi SET nome = 'genoveffa' where contatore = 10"; // SQL string
RETCODE retcode; // Return code
SQLSMALLINT columns;

int i,r;



// Allocate memory for ODBC Environment handle
SQLAllocEnv (&hEnv);

// Allocate memory for the connection handle
SQLAllocConnect (hEnv, &hDBC);

// Connect to the data source "ACCESSdb" using userid and password.
retcode = SQLConnect (hDBC, szDSN, SQL_NTS, szUID, SQL_NTS, szPasswd, SQL_NTS);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{

// Allocate memory for the statement handle
retcode = SQLAllocStmt (hDBC, &hStmt);

// Prepare the SQL statement by assigning it to the statement handle
retcode = SQLPrepare (hStmt, szSqlStr, sizeof (szSqlStr));

// Execute the SQL statement handle
retcode = SQLExecute (hStmt);

// Free the allocated statement handle
SQLFreeStmt (hStmt, SQL_DROP);

// Disconnect from datasource
SQLDisconnect (hDBC);

}


// Free the allocated connection handle
SQLFreeConnect (hDBC);

// Free the allocated ODBC environment handle
SQLFreeEnv (hEnv);
// fine
system("pause");
return 0;

}

eventuale commit dove lo metto.

MacApp
13-06-2008, 02:04
1. Non controlli sempre gli eventuali errori restituiti dalle varie funzioni che utilizzi. e questi potrebbero darti delle informazioni utili per risolvere il tuo problema.

Ad esempio:
http://msdn.microsoft.com/en-us/library/ms713584(VS.85).aspx

2. Come fatta la tabella "accessi"? Ti consiglio in ogni modo d'evitare di usare la sintassi:


INSERT INTO products VALUES (1, 'Cheese', 9.99);

in favore di


INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);


;-)

oregon
13-06-2008, 10:03
E poi ... se il 4 in

UCHAR szSqlStr[120] = "insert into accessi values (4,'Baglio','Aldo',29,'cliente')";

e in

//UCHAR szSqlStr[] = "UPDATE accessi SET nome = 'manuela' where IdAccessi = '4'";

si riferisce allo stesso campo e la UPDATE funziona, allora nella INSERT deve essere

'4'

racchiuso tra apici in quanto di tipo testo ...

vian85
13-06-2008, 10:55
nel codice non ho errori e neanche in fase di esecuzione, l'unico problema che quando vedo nella tabella accessi non ha fatto nessun inserimento

oregon
13-06-2008, 11:13
Non c'e' nessun errore a runtime ma hai controllato i valori delle variabili

retcode

ogni volta che hai eseguito una funzione?

Ti e' stato chiesto :

come fatta la tabella "accessi"?

di che tipo e' il campo IdAccessi ?

il 4 della INSERT si riferisca a IdAccessi ?

Se non controlli il retcode e non rispondi, sara' difficile fare una diagnosi e trovare un rimedio al tuo problema ...

vian85
13-06-2008, 11:37
retcode tutto ok!!


come fatta la tabella "accessi"?

la tabella fatta cos: IdAccess un intero,nome char,cognome char, password int,ruolo char



il 4 della INSERT si riferisca a IdAccessi ?

si

Loading