[Lazarus] SQLite database schema has changed

Andrea Mauri andrea.mauri.75 at gmail.com
Tue Dec 2 14:54:08 CET 2008


Thanks Joost.

Joost van der Sluis ha scritto:
> Op dinsdag 02-12-2008 om 12:47 uur [tijdzone +0100], schreef Andrea
> Mauri:
>   
>> Dear All,
>> I have a question regarding SQLite.
>> I got an error: 'database schema has changed' when I run the following 
>> code (code 1)  (when I execute the second Insert Query).
>>     
>
>   
>> code1:
>>
>>   if FileExists('e:\temp\prova.db') then
>>     DeleteFile('e:\temp\prova.db');
>>   SQLite3Connection1.DatabaseName:= 'e:\temp\prova.db';
>>   SQLite3Connection1.ExecuteDirect('create table T1 (ID integer not 
>> null, NOME varchar(200))');
>>   sqlquery1.SQL.Text:= 'insert into T1 (ID, NOME) values (:ID, :NOME)';
>>   SQLQuery1.Params.ParamByName('ID').AsInteger:= 1;
>>   SQLQuery1.Params.ParamByName('NOME').AsString:= 'Andrea';
>>   SQLQuery1.ExecSQL;
>>     
>
> Here you implecitely prepare the query before it gets executed. This is
> done so that if you run the query again, it's execution will be faster.
> One of the advantages of using parameters.
>  
>   
>>  SQLite3Connection1.ExecuteDirect('create table T2 (ID integer not null, 
>> COGNOME varchar(200))');
>>     
>
> But here you change the definition of the database. Thereafter the
> preparation of the query is not valid anymore. Call sqlquery.unprepare
> to solve the problem.
> Apparently Firebird doesn't mind the change in the definition, because
> it is on a different table. It looks like it that sqlite can not handle
> that.
>
>   
>>   SQLQuery1.Params.ParamByName('ID').AsInteger:= 2;
>>   SQLQuery1.Params.ParamByName('NOME').AsString:= 'Marco';
>>   SQLQuery1.ExecSQL;
>>   SQLTransaction1.CommitRetaining;
>>     
>
> This could be fixed by automatically unpreparing all statements when a
> ddl-statement (create, drop,...) is executed in sqlite. But I prefer not
> to do that, so that you have to do that manually.
>
> Joost.
>
> _______________________________________________
> Lazarus mailing list
> Lazarus at lazarus.freepascal.org
> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus
>
>   

-- 
Dr. Andrea Mauri, PhD
Milano Chemometrics and QSAR Research Group
Department of Environmental Sciences
University of Milano-Bicocca 
P.zza della Scienza, 1
20126 Milano - Italy

Tel: ++39 02 64482801
mailto:andrea.mauri.75 at gmail.com
http://michem.disat.unimib.it/chm/ 




More information about the Lazarus mailing list