PDA

View Full Version : [c]Database stile mysql..


$te
23-02-2009, 22:52
Esiste un database simile al mysql, con sintassi simile?

grazie

cdimauro
23-02-2009, 23:10
http://www.firebirdsql.org/

Questo non è pieno di bug come MySQL, è l'engine che segue più fedelmente lo standard SQL-9x e SQL-200x, è multitransazionale, e ha una licenza di tipo BSD (al contrario del primo che ha doppia licenza commerciale e GPL). ;)

$te
23-02-2009, 23:31
e come faccio a "comunicare" con questo? é facile con in php`?

cdimauro
24-02-2009, 00:07
http://it2.php.net/manual/en/intro.ibase.php

Ma è meglio che usi le PDO (http://it2.php.net/manual/en/book.pdo.php), e questo a prescindere dall'engine SQL che hai intenzione di usare.

$te
24-02-2009, 08:04
ma io voglio programmare in C, non in php

cdimauro
24-02-2009, 08:29
Avevi scritto questo:

"é facile con in php`?"

nell'altro messaggio, e pensavo che alla fine volessi programmare in PHP.

Sì, con FireBird puoi lavorare tranquillamente in C. Non l'ho mai fatto con questo linguaggio perché gli ho preferito Delphi, che ha già un ottimo supporto di base.

Comunque qui (http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_int_comps) dovresti trovare dei componenti per utilizzare in maniera abbastanza semplice FireBird (e InterBase, da cui deriva).

$te
24-02-2009, 08:53
scusa..ho sbagliato io nell'altro post:P

cmq mi sembra un po' complicato..infatti nell'ultimo post volevo chiedere se era facile come in php, in cui fai la tua query semplice. Qui non é cosi a quanto vedo...

cdimauro
24-02-2009, 09:07
PHP è un linguaggio dinamico, per cui facilita la vita. In C sei costretto a scrivere più codice, col rischio pure di commettere errori anche difficili da scovare.

$te
24-02-2009, 15:47
e non cé una guida semplice per fare delle semplici operazioni? (inserte e select...)

grazie

cdimauro
24-02-2009, 15:59
FireBird ha una buona documentazione: http://firebirdsql.org/index.php?op=doc

In particolare ti consiglio di scaricarti gli stupendi manuali in PDF "InterBase 6.0 Manuals", da integrare coi PDF delle release 1.5 e 2.1.

Di questi il "Language Reference" ti spiega tutti i comandi SQL con degli esempi.

cionci
24-02-2009, 18:06
Secondo me un ottimo database da integrare nelle proprie applicazioni è SQLite.
Sia chiaro che è molto più limitato di un qualsiasi dbms, ma è nato per il C e non ha bisogno di un'applicazione server da installare e configurare.

CozzaAmara
24-02-2009, 19:09
PostgreSQL. ;)

cdimauro
24-02-2009, 20:26
Secondo me un ottimo database da integrare nelle proprie applicazioni è SQLite.
Sia chiaro che è molto più limitato di un qualsiasi dbms, ma è nato per il C e non ha bisogno di un'applicazione server da installare e configurare.
Lo stesso vale per FireBird, che è pure disponibile in versione embedded. E ha tutte le funzionalità di FireBird, eccetto la connessione remota, ovviamente. ;)

cionci
24-02-2009, 20:28
Lo stesso vale per FireBird, che è pure disponibile in versione embedded. E ha tutte le funzionalità di FireBird, eccetto la connessione remota, ovviamente. ;)
Non lo sapevo, mi sa che lo devo provare in forma embedded.

cionci
24-02-2009, 20:39
Cesare, ho dato uno sguardo...ma non è in C++ l'interfaccia ?

cdimauro
24-02-2009, 21:00
Non lo sapevo, mi sa che lo devo provare in forma embedded.
Vedrai che non te ne pentirai. Sono anni che lavoro con engine SQL, e FireBird è quello che complessivamente mi piace di più, specialmente per la stupenda sintassi per lavorare con stored procedure e trigger (di gran lunga più semplice e flessibile rispetto a MySQL, Oracle, ecc.).
Cesare, ho dato uno sguardo...ma non è in C++ l'interfaccia ?
No, è in C. Direttamente dal file readme.txt presente nella cartella examples dell'installazione standard di FireBird 2.1:
/*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
The following example programs demonstrate a number of useful features of
the Firebird programming interface.

Note that the following environment variables need to be set before running
the examples:

ISC_USER - A valid username on the server.
ISC_PASSWORD - The password for the above user.
ISC_DATABASE - The path to the employee.gdb example database, including
server name. For example, to connect to the NT server
named "NTserver" via NetBEUI:
ISC_DATABASE=\\NTserver\c:\firebird\examples

This assumes that Firebird was installed to the
firebird directory on the c: drive.

In addition, a guest account should be created with the username "guest"
and password "guest" before running api15 and winevent.

Embedded Static SQL

Program Description
--------- ------------------------------------------------------------------
stat1.e Illustrates a simple update to an existing table, commit, rollback.

stat2.e Illustrates singleton select.

stat3.e Illustrates a simple cursor -- declare/open/close/fetch.

stat4.e Show 'declare table' and 'create table'.

stat5.e Demonstrate 'update where current of'.

stat6.e Select an array.

stat7.e Illustrate blob cursor for select.

stat8.e Illustrate blob cursor for insert.

stat9.e Execute and select from a stored procedure.

stat10.e Demonstrate 'set database', 'connect' and 'set transaction'.

stat11.e Demonstrate 'set transaction' with various isolation options.

stat12.e Event wait and signaling.
stat12t.e

WHENEVER SQLERROR and BASED_ON clause are illustrated by many programs.
^L

Embedded Dynamic SQL

Program Description
--------- ------------------------------------------------------------------
dyn1.e Execute 'create database' statement as a static string.

dyn2.e 'Execute immediate', and 'prepare' and 'execute'.

dyn3.e Dynamic cursor for select with output SQLDA allocated.

dyn4.e Execute an update query with parameter markers and input SQLDA.

dyn5.e Demonstrate dynamic reallocation of SQLDA and 'describe' statement.

dynfull.e A full_dsql program (process unknown statements).

VARY struct is used by dyn3.e, dynfull.e.
^L

API Interface

Program Description
--------- ------------------------------------------------------------------
api1.c Execute 'create dabatabase' statement as a static string.
Demonstrates zero database handle.

api2.c 'Execute immediate', and 'prepare' and 'execute'.

api3.c Dynamic cursor for select with output SQLDA allocated.

api4.c Execute an update query with parameter markers and input SQLDA.

api5.c Demonstrate dynamic reallocation of SQLDA and 'describe' statement.

apifull.c A full_dsql program (process unknown statements).
Demonstrates stmt_info calls and numeric scale.

api6.c Assemble an update current of statement, based on a dynamic
cursor name. Free a statement handle and re-use it as the cursor.

api7.c Demonstrate blob_open, get_segment.

api8.c Demonstrate create_blob, put_segment.

api9.c Demonstrate blob_open2 (using blob filter).
api9f.c Filter for api9.c. (Not part of Windows 3.1 clients)

api10.c Update an array using get_slice/put_slice.

api11.c Execute and select from a stored procedure.

api12.c A program with several active transactions.

api13.c A multi-database transaction with 2-phase commit.

api14.e Combine the three programming styles in one program.

api15.c Construct a database parameter buffer. db_info calls.

api16.c Demonstrate asynchronous event trapping
(Not available on Windows 3.1 clients)

winevent.c Demonstrate asynchronous event trapping
(Replacement for api16.c on Windows 3.1 Client)

api16t.c Identical to stat12t, this triggers the event for api16.

VARY struct is used by api3.c, apifull.c, and api14.e.

SQLCODE extraction from status is covered by several programs.

Zero transaction handle is covered in several programs, ex. api14.e.
:)

Tra l'altro FireBird è forse il più semplice engine SQL da configurare: non ci sono centinaia e centinaia di parametri da impostare, ma una trentina al massimo, e già di default i valori sono ben configurati (finora su Windows non ho cambiato nessun parametro, mentre su Linux soltanto il path su una cartella in cui far risiedere i db e i file temporanei, causa esigenze della macchina su cui doveva girare il server).

cionci
24-02-2009, 21:03
Avevo guardato qui: http://www.firebirdfaq.org/Firebird-Embedded-Linux-HOWTO.html

cdimauro
24-02-2009, 21:22
Nel mio PC ho la versione completa installata, che hai quei file di cui ho riportato l'elenco. La versione embedded per Windows è minimale, e non ha nessun file di esempio, quindi nemmeno i file che sono elencati nella pagina di cui hai riportato il link.

Può darsi che la pagina sia vecchia e non aggiornata, perché si riferisce a FB 1.5, mentre siamo già alla 2.1.

Comunque rimane valida per utilizzare FB in versione embedded su Linux, ma gli esempi in C è meglio recuperarli dalla versione completa.

cionci
24-02-2009, 21:26
Probabilmente fa uso di una libreria C++ esterna...da quanto si legge.

cdimauro
24-02-2009, 21:32
Non conosco gli internal, a parte che dalla versione 1.5 FB è realizzato interamente in C++.

Però i binding ci sono per tutti i linguaggi, C (in particolare) incluso.

cionci
24-02-2009, 21:34
No, intendevo dire che quel link che ho preso dal link che avevi messo te fa uso di una libreria esterna: http://www.ibpp.org/

cdimauro
24-02-2009, 21:40
Ah, non avevo capito. Scusami, ma oggi sto crollando dal sonno (cause troppe notti passate a lavorare). Vado a riposare, che è meglio.

Notte.

$te
25-02-2009, 08:13
ma quindi io che non ho bisogno di avere niente di troppo complicato..uso la versione embedded? la versione completa é a pagamento?
grazie

cionci
25-02-2009, 08:29
ma quindi io che non ho bisogno di avere niente di troppo complicato..uso la versione embedded? la versione completa é a pagamento?
grazie
No, non è pagamento. Tutti i database che ti abbiamo nominato fino ad ora sono completamente gratuiti...l'unico a pagamento per le applicazioni commerciali è proprio MySQL.

tomminno
25-02-2009, 08:35
scusa..ho sbagliato io nell'altro post:P

cmq mi sembra un po' complicato..infatti nell'ultimo post volevo chiedere se era facile come in php, in cui fai la tua query semplice. Qui non é cosi a quanto vedo...

Non è proprio C ma con questa libreria usi MySql, MsSql, Oracle, Firebird, PostgreSql, Sqlite con la stessa interfaccia che di per sè è molto semplice.

http://soci.sourceforge.net/

tomminno
25-02-2009, 08:36
Lo stesso vale per FireBird, che è pure disponibile in versione embedded. E ha tutte le funzionalità di FireBird, eccetto la connessione remota, ovviamente. ;)

Sbaglio o è solo per Windows la versione embedded?

cdimauro
25-02-2009, 08:53
No, c'è anche per Linux. Il link postato in precedenza da cionci riguarda proprio la configurazione di FireBird in modalità embedded sotto Linux.

cionci
25-02-2009, 19:05
No, c'è anche per Linux. Il link postato in precedenza da cionci riguarda proprio la configurazione di FireBird in modalità embedded sotto Linux.
Ma con l'uso di una libreria esterna e non per C, a quanto sembra, ma mi piacerebbe indagare meglio.

cdimauro
25-02-2009, 20:50
No, Riccardo, se guardi bene i primi 3 step elencati dettagliatamente nel link che hai postato servono a configurare Firebird in modalità embedded. Infatti l'ultima riga dello step 3 recita questo:

"Well, that's about it. Everything is setup and now you should put your executable into this directory and run it."

Lo step 4 che fa uso del C++ è stato riportato semplicemente come esempio per verificarne il funzionamento.

Ti assicuro che FB embedded lo puoi usare con qualunque linguaggio: non soltanto col C++. Io l'ho usato con Python e Delphi, ad esempio. Altri (http://firebirdnews.blogspot.com/2008/07/firebird-embedded-use-on-linux.html) con Mono (oltre al C++).

L'importante è piazzare il proprio eseguibile nella cartella in cui è stato creato l'ambiente di FB embedded. ;)

cionci
26-02-2009, 08:01
Mi dai un esempio scritto in C, voglio vedere se compila su Linux.
Edit: lascia perdere, mi ero scordato che si dovrebbe trovare nell'archivio.

$te
26-02-2009, 08:36
ho scaricato firebird 2.1.1...ma non trovo nessuno esempio di comunicare in C..:P

cdimauro
26-02-2009, 09:26
Vai in c:\Program Files\Firebird\Firebird_2_1\examples\api\ e troverai diversi esempi scritti in C. ;)

$te
26-02-2009, 10:35
ok! grazie mille..appena torno a casa provo!!!

gugoXX
26-02-2009, 11:37
Oracle Lite o Sql-Server Express. Entrambi gratuti e ridistribuibili anche per soluzioni commerciali.
Cosi' magari impari anche qualcosa che potra' anche piu' probabilmente servirti per lavoro.

cionci
26-02-2009, 11:41
Oracle Lite o Sql-Server Express. Entrambi gratuti e ridistribuibili anche per soluzioni commerciali.
Sicuramente ottimi, ma è come sparare ad un passerotto con un cannone :D
Poi non sono server less. C'è un server che gira come servizio...ed è pure bello pesante ;)

gugoXX
26-02-2009, 11:47
Sicuramente ottimi, ma è come sparare ad un passerotto con un cannone :D
Poi non sono server less. C'è un server che gira come servizio...ed è pure bello pesante ;)

Si', ma anche MySql no? Almeno quello che avevo usato io nelle due soluzioni commerciali per le quali l'ho usato.
Non e' un Database File o sbaglio?

cionci
26-02-2009, 11:49
Si', ma anche MySql no? Almeno quello che avevo usato io nelle due soluzioni commerciali per le quali l'ho usato.
Non e' un Database File o sbaglio?
Chiedeva un'alternativa a MySQL per usare nei suoi programmi C...gli stavamo appunto consigliando dei DBMS embedded, senza server, per poter essere usati nelle applicaizoni senza dover fare ogni volta l'installazione.

$te
26-02-2009, 13:51
embedded`? io ho installato la versione completa........

cdimauro
26-02-2009, 13:59
:rotfl: Comunque considera che puoi distribuire la tua applicazione FireBird embedded senza, quindi, installarlo. ;)

$te
03-03-2009, 08:56
ho provato a compilare il primo esempio che creava una tabella, ma (con il mio devc++..e non iniziate a darmi addosso:P) mi da alcuni errori: prima di tutto non trova la libreria <ibase.h>

cionci
03-03-2009, 10:25
Firebird è sicuramente un ottimo DB, ma mi sembra un po' confusionario come documentazione e sicuramente non adatto all'uso per un principiante.
Imho, se non hai bisogno di tutte le feature avanzate presenti in Firebird, ti conviene usare SQLite per la sua semplicità.
Basta scaricare questo zip: http://www.sqlite.org/sqlite-amalgamation-3_6_11.zip
Lo estrai nella directory del tuo progetto. Carichi il file.c nel progetto.

A quel punto segui l'esempio che trovi qui: http://www.sqlite.org/quickstart.html
L'eseguibile per creare il database lo trovi qui: http://www.sqlite.org/sqlite-3_6_11.zip
Ti consiglio di modificare l'esempio così:

#include <stdio.h>
#include "sqlite3.h"

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}

int do_query(char * database, char * query){
sqlite3 *db;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open(database, &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
}
rc = sqlite3_exec(db, query, callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}

Ti basta chiamare do_query con il nome del DB e la query SQL.
Questo è solo un codice di esempio. Ovviamente per il resto devi leggerti la documentazione: http://www.sqlite.org/cintro.html
Chiaro che tu debba studiarti anche il suo dialetto SQL ;)
Esistono molti tutorial sia sul dialetto SQL che sull'interfaccia C (basta ricercare su google i nomi delle funzioni).

woomacoder
03-03-2009, 11:06
PostgreSQL. ;)

assolutamente d'accordo :D

cdimauro
03-03-2009, 11:40
ho provato a compilare il primo esempio che creava una tabella, ma (con il mio devc++..e non iniziate a darmi addosso:P) mi da alcuni errori: prima di tutto non trova la libreria <ibase.h>
Mi spiace, ma in C non c'ho lavorato con FireBird.

tomminno
03-03-2009, 13:38
ho provato a compilare il primo esempio che creava una tabella, ma (con il mio devc++..e non iniziate a darmi addosso:P) mi da alcuni errori: prima di tutto non trova la libreria <ibase.h>

Hai installato il client di firebird?
Se si hai incluso la cartella {Firebird Install Dir}\Firebird_2_1\include?

$te
10-03-2009, 09:04
salve..ho provato a usare l'esempio:

#include <stdio.h>
#include "sqlite3.h"
#include "sqlite3ext.h"


static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}

int do_query(char * database, char * query){
sqlite3 *db;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open(database, &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
}
rc = sqlite3_exec(db, query, callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}


ma mi da come errore: "sqlite3_api" undeclared

:P

ho provato anche a fare l'esempio che cé sul sito:

#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}

int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;

if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
exit(1);
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}


Ma mi da errore, mi da link error, undefined reference to sqlite3_open, errms, close, exec, free, close.

boh...

cionci
10-03-2009, 10:04
Sei sicuro di aver letto proprio tutto di quello che ho scritto ?
Basta scaricare questo zip: http://www.sqlite.org/sqlite-amalgamation-3_6_11.zip
Lo estrai nella directory del tuo progetto. Carichi il file.c nel progetto.

$te
10-03-2009, 16:30
intendi mettere un include per sqlite3.c? perché ho provato anche cosi ma mi dava ancora piu errori, quindi pensavo d'aver capito male:P

cionci
10-03-2009, 17:10
intendi mettere un include per sqlite3.c? perché ho provato anche cosi ma mi dava ancora piu errori, quindi pensavo d'aver capito male:P
Lo devi aggiungere al tuo progetto.

$te
11-03-2009, 09:01
allora..creo un nuovo progetto, nel main metto il codice che mi hai postato, poi aggiungo al progetto il file sqlite3.c, e nella cartella del progetto aggiungo anche i file sqlite3.h e sqlite3.exe, giusto?
perché mi da questo errore:

link error: undefined reference to WinMain@16

:S

(grazie per la pazienza)

$te
11-03-2009, 09:07
tutto a posto! ho copiato l'es che c'era sul link ke mi hai dato e funziona...ora mi devo studiare un po' la documentazione..:P

$te
11-03-2009, 09:36
ora sto cercando di capire come funziona..e ho un paio di domande: quando uso la funziona sqlite3_open, qual é il nome del database? perché con il file sqlite3.exe ho creato una tabella e ho aggiunto un paio di voci, pero non so il nome del db. Poi mi sembra che la tabella creata non la "salvi", perché non vede piu la tabella se chiudo e riapro il file exe: devo forse terminare in qualche modo prima di chiudere? tipo chiudendo il db?

grazie

tomminno
11-03-2009, 09:53
ora sto cercando di capire come funziona..e ho un paio di domande: quando uso la funziona sqlite3_open, qual é il nome del database? perché con il file sqlite3.exe ho creato una tabella e ho aggiunto un paio di voci, pero non so il nome del db. Poi mi sembra che la tabella creata non la "salvi", perché non vede piu la tabella se chiudo e riapro il file exe: devo forse terminare in qualche modo prima di chiudere? tipo chiudendo il db?

grazie

Il nome del db coincide con il nome del file, ovvero se specifichi un nome non esistente viene creato un nuovo file, altrimenti viene aperto un db esistente.

$te
11-03-2009, 09:58
quindi nel mio caso sarebbe "main". é per questo che non mi "salva" la tabella che creo?

cionci
11-03-2009, 10:31
quindi nel mio caso sarebbe "main". é per questo che non mi "salva" la tabella che creo?
No corrisponde al nome del file che hai creato con l'eseguibile sqlite3

$te
11-03-2009, 12:51
ma il problema é questo:
se io eseguo il file sqlite3.exe, creo una tabella e ci inserisco un dato, poi non me lo salva, se non temporaneamente, perché quando riapro il programma, mi dice che non cé la tabella in questione, quindi cosa devo fare? specificare il database? o dirgli "salva!"?
grazie

cionci
11-03-2009, 13:06
C:\>sqlite3.exe test.db
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values ("ciao", 1);
sqlite> insert into tbl1 values ("ciao2", 2);
sqlite> select * from tbl1;
ciao|1
ciao2|2
sqlite> .quit

C:\>sqlite3.exe test.db
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from tbl1;
ciao|1
ciao2|2
sqlite>.quit

:boh:

$te
11-03-2009, 14:14
C:\>sqlite3.exe test.db

é questo che ti appare all'inizio?
perché a me appare solo:
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

Non capisco appunto: come fai a selezionare il db? dove viene poi vengono salvati i dati?

cionci
11-03-2009, 14:27
sqlite3.exe test.db

E' il comando che immetto per creare un nuovo DB o aprirne uno esistente (in questo caso test.db).
Non lo devi selezionare, ogni file è già un database indipendente.

$te
11-03-2009, 14:37
ma in che senso? perché io sto parlando non del codice C, ma del file sqlite3.exe, io avvio quello, pero appunto non salva nulla

cionci
11-03-2009, 14:51
Ti ho fatto vedere sopra che avviandolo ed immettendo le query la tabella viene mantenuta...cosa ti devo fare vedere di più per dimostrarti che funziona ? :D

cionci
11-03-2009, 14:57
Tra l'altro puoi provare anche te...immetti la stessa sequenza di comandi che ho dato io e lo vedi.

$te
11-03-2009, 15:25
ma il problema é proprio questo:P
io ho fatto la stessa cosa:
avvio il file sqlite3.exe (quello scaricato dal sito)
creo la tabella(create table..ecc)
inserisco valore
poi faccio .quit, riavvio il file sqlite3.exe, faccio select * from tbl1, e mi dice no such table!

NN capisco...:confused: :confused: :confused: :confused: :muro: :muro: :muro:

cionci
11-03-2009, 15:35
Copia tutto quello che fai ed incollalo qui.

$te
11-03-2009, 16:15
avvio il file sqlite3.exe (quello scaricato dal sito)
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values ("ciao", 1);
sqlite> insert into tbl1 values ("ciao2", 2);
sqlite> select * from tbl1;
ciao|1
ciao2|2
sqlite> .quit

riavvio il file sqlite3.exe
sqlite> select * from tbl1;
SQL error: no such table tbl1


boh...

cionci
11-03-2009, 16:51
Ma non mi hai scritto come lanci sqlite3...quali parametri gli dai ?

$te
11-03-2009, 17:26
ma semplicemente avviando il file exe (doppio click sul file sqlite3.exe:P)

cionci
11-03-2009, 17:28
ma semplicemente avviando il file exe (doppio click sul file sqlite3.exe:P)
Ecco perché non te lo salva...chissà perché sia nella documentazione che nelle prove che ti ho incollato io era specificato di avviare l'eseguibile con un parametro :fiufiu:

Create e new database: http://www.sqlite.org/quickstart.html

$te
11-03-2009, 17:38
ma se faccio partire l'exe, poi faccio:

sqlite> sqlite3 test.db
...>;
SQL error: near "sqlite3": syntax error

che sbaglio ora?? (era quello che to continuavo a chiedere: come selezionare un database?)

grazie per la pazienza:P

cionci
11-03-2009, 17:46
No, devi fare partire l'exe così:

sqlite3 test.db

test.db sarà il database dove verranno salvati i file.

$te
11-03-2009, 17:52
cioè? che file devo avviare? .exe no?

cionci
11-03-2009, 18:02
Sì devi avviare il .exe, però con un parametro...cioè il nome che vuoi dare al file che deve contenere il database.

$te
11-03-2009, 18:55
ma...scusa la mia domanda, ma come faccio ad avviarlo con un parametro???

Vincenzo1968
11-03-2009, 19:01
ma...scusa la mia domanda, ma come faccio ad avviarlo con un parametro???

EDIT

No, devi fare partire l'exe così:

sqlite3 test.db

test.db sarà il database dove verranno salvati i file.

cionci
11-03-2009, 19:06
ma...scusa la mia domanda, ma come faccio ad avviarlo con un parametro???
Start -> Esegui -> inserisci cmd-> Ok
Dal prompt dei comandi ti sposti con il comando CD dove hai sqlite3.exe e dai il comando:

sqlite3 c:\percorso\nomedb.db

Ovviamente devi dare il percorso corretto dove vuoi che venga creato il tuo DB. Mi immagino che possa andare bene in una cartella del tuo progetto C.

tomminno
11-03-2009, 23:26
ma...scusa la mia domanda, ma come faccio ad avviarlo con un parametro???

Forse dovresti ripassare un minimo le basi, non ti è mai capitato di lanciare un eseguibile con dei parametri?

$te
13-03-2009, 08:19
scusate l'ignoranza, ma non avevo mai avviato un programma con un parametro, non mi era mai servito. Ora che sono riuscito, come faccio, in c, a selezionare il db?
Io ho fatto cosi:


#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
system("PAUSE");

}

int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;

if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
system("PAUSE");
}
rc = sqlite3_open("db", &db);
if( rc!=SQLITE_OK ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
system("PAUSE");
}
char str;
rc = sqlite3_exec(db, "select * from tb;", callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
system("PAUSE");

}



Ma non mi prende il db, perché non mi trova la tabella tb..:S

tomminno
13-03-2009, 12:20
sqlite3_open("db", &db);


Questo codice apre il file chiamato db. Te hai creato la tabella nel file db?

$te
13-03-2009, 13:57
ho risolto, grazie!
Che fatica pero:P
grazie della pazienza:D:D :cool:

$te
13-03-2009, 14:11
scsusate una cosa...ma come quando faccio una richiesta (select from...), come faccio a salvare la stringa che mi torna indietro? senza pero stamparla?(perché con sqlite_exec la stampa direttamente....)

grazie

cionci
13-03-2009, 14:13
Veramente dovrebbe essere qua che la stampa:

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
system("PAUSE");
}

$te
13-03-2009, 14:18
:doh:
che domanda da novellino:P

grazie!