Merhaba,
Sqlite database DBNavigator ile kayıt eklerken sorun olmaz iken bu işlemi buton üzerinden yapınca (TDBXError with message 'database is locked'.) hatası alıyorum sebebini bulamadım örnek proje linki http://s3.dosya.tc/server21/IqcIVO/Test.rar.html buradan
procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLQuery1 do
begin
Close;
SQL.Clear;
Sql.add('Insert Into USER (KULLANICIADI, KULLANICISIFRE)');
Sql.add(' Values (:Kadi, :KadiSif)');
ParamByName('Kadi').AsString:= Edit1.Text;
ParamByName('KadiSif').AsString:= Edit2.Text;
ExecSQL;
Close;
Active:= False;
end;
end;
Kayıt sırasında (database is locked) hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Kayıt sırasında (database is locked) hatası
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Kayıt sırasında (database is locked) hatası
- Örnek projende ihtiyaç duyulacak SQLite'in DLL'si yoktu ve veritabanı lokasyonunu statik verildiğinden bulunamadı. Bundan dolayı söylediğin durum değil başka türlü sorunlar nedeniyle çalışmadı.
- Aşağıdaki şekilde bir düzenek ile çalışır halde örnek hazırladım.

SQLite DLL dosyası eklendi, Win32 dizininin içinde mevcuttur.
Çalışır haldeki örnek projeyi bu linkten indirebilirsin.
- Aşağıdaki şekilde bir düzenek ile çalışır halde örnek hazırladım.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
with SQLQuery1 do
begin
Close;
SQL.Clear;
Sql.add('Insert Into USER (KULLANICIADI, KULLANICISIFRE)');
Sql.add(' Values (:Kadi, :KadiSif)');
ParamByName('Kadi').AsString:= Edit1.Text;
ParamByName('KadiSif').AsString:= Edit2.Text;
ExecSQL;
// SQL cümlemizi yollayalım...
ClientDataSet1.Active := False;
ClientDataSet1.CommandText := 'SELECT * FROM [USER]';
ClientDataSet1.Active := True;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SQLConnection1.Connected := False;
SQLConnection1.Params.Values['Database'] := ExtractFilePath(Application.ExeName) + 'Database\MyDatabase.db';
try
SQLConnection1.Connected := True;
Statusbar1.Panels[1].Text := 'Database İle Bağlantı Sağlandı!';
ClientDataSet1.ProviderName := 'DataSetProvider1';
DataSetProvider1.DataSet := SQLQuery1;
DataSetProvider1.Options := [poAllowCommandText];
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;
// SQL cümlemizi yollayalım...
ClientDataSet1.Active := False;
ClientDataSet1.CommandText := 'SELECT * FROM [USER]';
ClientDataSet1.Active := True;
except
Statusbar1.Panels[1].Text:= 'Hata Oluştu Lütfen Daha Sonra Tekrar Deneyiniz!';
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2 = 0 then//Çift sayılı Alanların Rengi 0,2,4....
DBGrid1.Canvas.Brush.Color := RGB (255, 255, 255) //Çift sayılı Zemin Rengi
else
if DBGrid1.DataSource.DataSet.RecNo mod 2 = 1 then//Tek Sayılı Alanların Rengi 1,3,5...
DBGrid1.Canvas.Brush.Color := RGB (238, 233, 233); //Tek sayılı Zemin Rengi
with DBGrid1.Canvas do
begin
DBGrid1.Canvas.Font.Size:=8;//Yazı Büyüklüğü
begin
if (gdSelected in State) then
begin
DBGrid1.Canvas.Font.Size := 8;//Seçili Alan Yazı Büyüklüğü
DBGrid1.Canvas.Font.Style :=[fsBold]; //Seçili Alan Yazı Kalınlığı
DBGrid1.Canvas.Font.Color := RGB(0, 0, 128);//Seçili Alan Yazı Rengi
DBGrid1.Canvas.Brush.Color := RGB(255, 182, 193);// Seçili Alanın Zemin Rengi
end;
end;
DBGrid1.Canvas.TextRect(Rect, Rect.left+2, Rect.Top+2, Column.Field.AsString );
end;
end;

SQLite DLL dosyası eklendi, Win32 dizininin içinde mevcuttur.
Çalışır haldeki örnek projeyi bu linkten indirebilirsin.

Re: Kayıt sırasında (database is locked) hatası
Elinize sağlık hocam
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Kayıt sırasında (database is locked) hatası
Selam bileşenleri bir birine bağlı olarak projemi hazırlıyorum sqlite.dll projeme ekledim.
Fakat SQLQuery active true yapıyorum ve kullanıcı giriş yapınca database is locked hasası SQLQuery active false olunca hata vermiyor...
procedure TForm1.GirisClick(Sender: TObject);
begin
try
with SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * From User where KADI=:Kad and KSIFRE=:Ksif');
ParamByName('Kad').Value := (Edit1.text);
ParamByName('Ksif').Value := (Edit2.text);
Prepared := True;
Open;
if not IsEmpty then
begin
Form2.Show();
Form1.Hide();
Close;
Active := False;
end
else
begin
Close;
Active := False;
Label1.Caption := 'Kullanıcı Adı veya Şifre Yanlış!';
end;
end;
except
Label1.Caption := 'Hata Oluştu!!!!';
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
with Form1.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.add('Update USER Set ONLINE=:Ofline');
SQL.add('where KADI =''' + Form1.Edit1.Text + '''');
ExecSQL;
Close;
end;
end;
DriverName=SQLite
DriverUnit=Data.DbxSqlite
DriverPackageLoader=TDBXSqliteDriverLoader,DBXSqliteDriver170.bpl
MetaDataPackageLoader=TDBXSqliteMetaDataCommandFactory,DbxSqliteDriver170.bpl
FailIfMissing=False
Database=C:\Testo\Database\Database.db
Fakat SQLQuery active true yapıyorum ve kullanıcı giriş yapınca database is locked hasası SQLQuery active false olunca hata vermiyor...
procedure TForm1.GirisClick(Sender: TObject);
begin
try
with SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * From User where KADI=:Kad and KSIFRE=:Ksif');
ParamByName('Kad').Value := (Edit1.text);
ParamByName('Ksif').Value := (Edit2.text);
Prepared := True;
Open;
if not IsEmpty then
begin
Form2.Show();
Form1.Hide();
Close;
Active := False;
end
else
begin
Close;
Active := False;
Label1.Caption := 'Kullanıcı Adı veya Şifre Yanlış!';
end;
end;
except
Label1.Caption := 'Hata Oluştu!!!!';
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
with Form1.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.add('Update USER Set ONLINE=:Ofline');
SQL.add('where KADI =''' + Form1.Edit1.Text + '''');
ExecSQL;
Close;
end;
end;
DriverName=SQLite
DriverUnit=Data.DbxSqlite
DriverPackageLoader=TDBXSqliteDriverLoader,DBXSqliteDriver170.bpl
MetaDataPackageLoader=TDBXSqliteMetaDataCommandFactory,DbxSqliteDriver170.bpl
FailIfMissing=False
Database=C:\Testo\Database\Database.db
Re: Kayıt sırasında (database is locked) hatası
procedure TForm2.FormShow(Sender: TObject);
begin
with Form1.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.add('Update USER Set ONLINE=:Ofline');
SQL.add('where KADI =''' + Form1.Edit1.Text + '''');
ExecSQL; ----Bunları iptal
Close;
end;
end;
begin
with Form1.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.add('Update USER Set ONLINE=:Ofline');
SQL.add('where KADI =''' + Form1.Edit1.Text + '''');
ExecSQL; ----Bunları iptal
Close;
end;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Kayıt sırasında (database is locked) hatası
Aynı anda iki erişime izin vermez. ilk bağlanan kilitlediği için ikinci hata üretir. SQLite de durum maalesef böyle.
Bu prensibi takip ederseniz locked hatası almazsınız.
Bu prensibi takip ederseniz locked hatası almazsınız.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...