s-soleimani
دوشنبه 31 خرداد 1395, 10:49 صبح
در برنامه پیغام خطای "Access violation at address……" دارم، کاری که دارم انجام میدم اینه که وقتی روی یک دکمه در فرم کلیک میشه یک procedure از یک یونیت فراخوانی میشه و در اون پروسیجر یک رکورد از دیتابیس sqlite ام آپدیت میشه،
زمانی که این پروسیجر رو در رویداد کلیک دکمه ام بتنهایی فراخوانی کنم درست انجام میشه ولی کافیه قبل از فراخوانی یک دستور شرطی دیگه بنویسم (هر دستور غیر مرتبطی حتی)، خطای Access violation میده
طبق جستجو یی که کردم این خطا مربوط به این هست که فرم داره جایی free میشه ، ولی از کجا بفهمم که فرمم کجا free میشه؟
کد مربوط به فرمم :
procedure TfrmRmamor.BT_saveClick(Sender: TObject);
var
mydb:TMyDataBase;
intvar:Integer;
begin
if not(FileExists(path+ed_code.Text+'.jpg')) then
ShowMessage('no Picture!')
else
mydb.UpdateSqlite();
end;
کد مربوط به یونیت MyDataBase :
unit MyDataBase;
interface
uses
SQLiteTable3,undm,unrmamor;
const
SEARCH_MODE_FULL = 0;
SEARCH_MODE_FAST = 1;
type
TTemplate = record
FId: Integer;
FTemplate: TArrayOfByte;
FTemplateId: string;
end;
TMyDataBase = class(TObject)
private
database: TSQLiteDatabase;
count: Integer;
public
procedure UpdateSqlite();
end;
implementation
const
PathToDb = 'Database\SqliteDB.db';
procedure TMyDataBase.UpdateSqlite();
var db: String;
begin
db := PathToDb;
database := TSQLiteDatabase.Create(db);
database.ExecSQL('UPDATE Templates SET TemplateId = 33 Where Id=1 ');
end;
end.
خطایی که دریافت می کنم روی خطTSQLiteDatabase.Create(db); database := هستش
....PROJECT raised exception class EaccessViolation with message 'Access violation at address
زمانی که این پروسیجر رو در رویداد کلیک دکمه ام بتنهایی فراخوانی کنم درست انجام میشه ولی کافیه قبل از فراخوانی یک دستور شرطی دیگه بنویسم (هر دستور غیر مرتبطی حتی)، خطای Access violation میده
طبق جستجو یی که کردم این خطا مربوط به این هست که فرم داره جایی free میشه ، ولی از کجا بفهمم که فرمم کجا free میشه؟
کد مربوط به فرمم :
procedure TfrmRmamor.BT_saveClick(Sender: TObject);
var
mydb:TMyDataBase;
intvar:Integer;
begin
if not(FileExists(path+ed_code.Text+'.jpg')) then
ShowMessage('no Picture!')
else
mydb.UpdateSqlite();
end;
کد مربوط به یونیت MyDataBase :
unit MyDataBase;
interface
uses
SQLiteTable3,undm,unrmamor;
const
SEARCH_MODE_FULL = 0;
SEARCH_MODE_FAST = 1;
type
TTemplate = record
FId: Integer;
FTemplate: TArrayOfByte;
FTemplateId: string;
end;
TMyDataBase = class(TObject)
private
database: TSQLiteDatabase;
count: Integer;
public
procedure UpdateSqlite();
end;
implementation
const
PathToDb = 'Database\SqliteDB.db';
procedure TMyDataBase.UpdateSqlite();
var db: String;
begin
db := PathToDb;
database := TSQLiteDatabase.Create(db);
database.ExecSQL('UPDATE Templates SET TemplateId = 33 Where Id=1 ');
end;
end.
خطایی که دریافت می کنم روی خطTSQLiteDatabase.Create(db); database := هستش
....PROJECT raised exception class EaccessViolation with message 'Access violation at address