Veri tabanına bağlanmak için aşağıdaki kodu yazıyorum ancak access violation hatası alıyorum. Başka projede çalışmasına rağmen şimdi çalışmıyor. Ne yapacağımı bilemedim.
Kod şöyle:
Kod: Tümünü seç
const
//folders
DataFolder ='astraDATA';
LibFolder ='astraLIB';
logFolder ='astraLOG';
//files
db_File_Name ='ASTRADB.DB';
Chatroomips_db_FileName ='CHATROOMIPSDB.DB';
Archive_db_FileName ='ARCHIVEDB.DB';
var
App_path:widestring; //app dir path
//sql3.dll yolu
LibFolder_Path:widestring;
//sql3.dll folder
Lib_Path:widestring;
Data_folder_path:widestring; // data folder path
Log_Folder_Path:widestring; //log folder path
MainDB_File_Path:WideString; //database file path
ChatroomipsDB_File_Path:widestring; //Chatroomips DB
ArchiveDB_File_Path:widestring;
...
procedure init_Path_Vars;
begin
App_path:=ExtractFilePath(ParamStr(0));
LibFolder_Path:=app_path+LibFolder;
Lib_Path:=LibFolder_Path+'\sqlite3.dll';
data_folder_path:=App_path+DataFolder+'\';
MainDB_File_Path:= data_folder_path+db_File_Name;
ChatroomipsDB_File_Path:=data_folder_path+Chatroomips_db_FileName;
ArchiveDB_File_Path:=data_folder_path+Archive_db_FileName;
Log_Folder_Path:= App_path+logFolder;
end;
Kod: Tümünü seç
uses
Classes, SysUtils,Data.DB,
//firedac
FireDAC.Stan.ExprFuncs,
FireDAC.Phys.SQLiteDef, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet,
FireDAC.Comp.Client, FireDAC.Phys.SQLite;
//fieredac ends
....
var
conn: TFDConnection;
mqry: TFDQuery;
lnk: TFDPhysSQLiteDriverLink;
...
procedure create_DBs;
begin
conn:=TFDConnection.Create(nil);
mqry:=TFDQuery.Create(nil);
lnk:=TFDPhysSQLiteDriverLink.Create(nil);
with lnk do begin
Release;
VendorLib:=Lib_Path;
DriverID:='SQLite';
end;
conn.LoginPrompt:=false;
conn.ResourceOptions.SilentMode := true;
conn.Params.Clear;
conn.Params.Values['DriverID'] := 'SQLite';
conn.Params.Values['CharacterSet'] := 'UTF8';
conn.Params.Values['PAGE_SIZE'] := '16384';
conn.ExecSQL('ATTACH '''+MainDB_File_Path+''' AS MAINDB');
conn.ExecSQL('ATTACH '''+ChatroomipsDB_File_Path+''' AS CHATROOMIPSDB');
conn.ExecSQL('ATTACH '''+ArchiveDB_File_Path+''' AS ARCHIVEDB');
create_Tables;
end;
procedure create_Tables;
var
chportstr:ansistring;
begin
//table yoksa oluşturu yazmalıyım!!!!!!
chportstr:= inttostr(random(60000)+5000);
try
//create table settings
mqry.Close;
mqry.SQL.clear;
mqry.SQL.Text:='CREATE TABLE IF NOT EXISTS MAINDB.TBSETTINGS '+
'(ID integer NOT NULL PRIMARY KEY AUTOINCREMENT, '+
'CONFKEY varchar(50) UNIQUE, '+
'CONFVALUE varchar(500)'+
');';
mqry.ExecSQL;
//add data
//Channel Name
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''channelname'''+
',''Astra_Channel'''+
');';
mqry.ExecSQL;
//Channel topic
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''channeltopic'''+
',''Test_Topic'''+
');';
mqry.ExecSQL;
//Channel port
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''channelport'''+
','''+chportstr+''''+
');';
mqry.ExecSQL;
//Channel url
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''channelurl'''+
',''www.google.com'''+
');';
mqry.ExecSQL;
//Channel url caption
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''channelurlcaption'''+
',''GOOGLE'''+
');';
mqry.ExecSQL;
//is allowing avatar?
mqry.SQL.Text:='INSERT OR IGNORE INTO MAINDB.TBSETTINGS '+
'(CONFKEY, CONFVALUE) VALUES '+
'('+'''isallowavatar'''+
',''1'''+
');';
mqry.ExecSQL;
except
end;
try
mqry.Close;
mqry.SQL.clear;
mqry.SQL.Text:='CREATE TABLE IF NOT EXISTS CHATROOMIPSDB.TBCHATROOMIPS '+
'(ID integer NOT NULL PRIMARY KEY AUTOINCREMENT, '+
'ipc NUMERIC(10) NOT NULL,'+
'portw Integer NOT NULL,'+
'ackcount Integer NOT NULL'+
');';
mqry.ExecSQL;
mqry.SQL.Text:='CREATE TABLE IF NOT EXISTS CHATROOMIPSDB.TBBACKCHATROOMIPS '+
'(ID integer NOT NULL PRIMARY KEY AUTOINCREMENT, '+
'ipc NUMERIC(10) NOT NULL,'+
'portw Integer NOT NULL,'+
'ackcount Integer NOT NULL'+
');';
mqry.ExecSQL;
//add data
add_Backips2DB(mqry);
except
end;
end;
procedure add_Backips2DB(qry:TFDQuery);
begin
qry.SQL.Text:='INSERT OR REPLACE CHATROOMIPSDB.TBBACKCHATROOMIPS '+
'(ipc,portw,ackcount) VALUES ('+
'320879980,3000,3);'; qry.ExecSQL;
qry.SQL.Text:='INSERT OR REPLACE CHATROOMIPSDB.TBBACKCHATROOMIPS '+
'(ipc,portw,ackcount) VALUES ('+
'2869011900,21212,10);'; qry.ExecSQL;
qry.SQL.Text:='INSERT OR REPLACE CHATROOMIPSDB.TBBACKCHATROOMIPS '+
'(ipc,portw,ackcount) VALUES ('+
'499297351,44444,3);'; qry.ExecSQL;
end;