Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133

    [C] problema con UPDATE sqlite3

    Sale a tutti. Questo è il codice della mia funzione. Non riesco a capire come mai la query di UPDATE non venga eseguita realmente, anche se tutte le funzioni ritornano i messaggi corretti, come se l'operazione fosse andata a buon fine. Sembra che manchi qualcosa come COMMIT.

    codice:
    int set_distance(struct sockaddr_in peeraddr, int distance) {
    
    	sqlite3 *db;
    	sqlite3_stmt *update_stmt;
    	int rc;
    
    	rc = sqlite3_open(DBname, &db);
    	if( rc ){
    		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    		sqlite3_close(db);
    		return 0;
    	}
    
    	static char *sql = "UPDATE peers SET distance = ? WHERE ip = '?' AND port = ?";
    	if(sqlite3_prepare(db,sql,-1,&update_stmt,NULL) != SQLITE_OK){
    		fprintf(stderr,"Errore durante la preparazione dello statement UPDATE. Error: %s\n", sqlite3_errmsg(db));
    		return 0;
    	}
    
    	//inserisco i vari campi
    	sqlite3_bind_int(update_stmt, 1, distance);
    	sqlite3_bind_text(update_stmt, 2, inet_ntoa(peeraddr.sin_addr), -1, SQLITE_TRANSIENT);
    	sqlite3_bind_int(update_stmt, 3, ntohs(peeraddr.sin_port));
    
    	int success = sqlite3_step(update_stmt);
    
    	if(success != SQLITE_DONE){
    		fprintf(stderr, "Errore durante l'update di 'peers'. Error: %s\n", sqlite3_errmsg(db));
    		sqlite3_close(db);
    		return 0;
    	}
    
    	success = sqlite3_finalize(update_stmt);
    	printf("Peer updating succesful!\n");
    	sqlite3_close(db);	
    
    	//TODO check if peer already exists
    	return 0;
    }

  2. #2
    Non è che devi dare un comando del tipo ExecSql (il commit viene dopo)?
    In FreePascal prima si passa la riga sql poi si invoca ExecSql in modo che essa venga applicata. Infine se si ha aperto una transizione la si chiude.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133
    No, in realtà era molto più semplice: bastava levare gli apici alla riga

    static char *sql = "UPDATE peers SET distance = ? WHERE ip = '?' AND port = ?";

    per ip.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.