Модульдің формасында ауыспалы жолдық типті және оған ConnectionString қасиетіндегі AdoQuery1 компонентасын меншіктейік.
Ол үшін Ctrl+C пернелерүйлесімділігі арқылы объектілер инспекторларының қасиетін көшіріп, содан кейін модульдің формасына қойыңыз. Жол ұзақ болғандықтан оны бірнеше жолдарға бөлу керек болады. Нәтижесінде сізде келесідей шығуы керек (қарамен белгіленген):
……………………………………………………….
var
fmMain: TfmMain;
NameSortField:string;Desc:boolean;
var ConStr:string =
'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data ' +
'Source=C:\Мои Документы\Иванов\BDMyWorld.mdb;Mode=Share Deny None;Ext' +
'ended Properties="";Jet OLEDB:System database="";Jet OLEDB:Regis' +
'try Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type' +
'=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bu' +
'lk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Data' +
'base Password="";Jet OLEDB:Create System Database=False;Jet OLED' +
'B:Encrypt Database=False;Jet OLEDB:Don'#39't Copy Locale on Compact=' +
'False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:S' +
'FP=False' ;
implementation
uses SplshWnd, unRep;
……………………………………………………….
Мәтіннің жолдары басқадай қосылып тұрулары да мүмкін, ол негізінен провайдерлерге (сіз, МҚ мен байланысқан) байланысты.
МҚ – ның файылында ұйымдастырылған жол: Source=C:\Мои Документы\Иванов\BDMyWorld.mdb;
Жол Source= символының бірізділігінен басталады нүктелі үтірмен аяқталады. Айтылғанды жаңа бір бағдарлама ішіндегі бағдарламаны жасайтын, жолдардың қиылысуында және оны басқаға ауыстыруында қолданайық.
Директивадан кейін модуль формасына {$R *.dfm} төменде берілген мәтінді енгізіңіз:
……………………………………………………….
{$R *.DFM}
procedure ChangeBasePath(var scon:string;sbase:string);
var j1,j2:integer;
begin
j1:=Pos('Data Source=',scon);
if j1>0 then begin
repeat
Inc(j1);
until scon[j1]='=';
Inc(j1);J2:=J1;
repeat
Inc(j2);
until scon[j2]=';';
Delete(scon,j1,j2-j1);
Insert(sbase,scon,j1);
end;
end;
function FindFileBD(nmFileBD:string;var scon:string; var dlg:TOpenDialog):string;
var sb:string;
begin
sb:= ExtractFilePath(ParamStr(0))+ nmFileBD;
if Not(FileExists(sb)) then
begin
//Настройка диалога:
dlg.Filter:='Файл ' +nmFileBD+'|'+nmFileBD;
dlg.Title :='Найдите файл базы данных !';
dlg.InitialDir:=ExtractFilePath(ParamStr(0));
if dlg.Execute then
begin
sb:=dlg.FileName;
ChangeBasePath(scon,sb);
end
else
begin
ShowMessage('Не найден файл БД:'+#13#10+sb+#13#10+'До свидания !');
sb:='';
end;
end;
Result:=sb;
if sb<>'' then ChangeBasePath(ConStr,sb);
end;
……………………………………………………….
Тапсырма: Бағдарлама ішіндегі бағдарламалар алгоритімімен танысып, оларға комментарии жасаңыз.
Dialogs бетінен TOpenDialog компонентін формаға орналастырыңыз. Name қасиетіне dlgBD мағынасын беріңіз.
Енді төмендегі қара шрифтпен жазылғанды өндеуші OnCreate формасына енгізіңіз:
procedure TfmMain.FormCreate(Sender: TObject);
var sbase:string;
begin
sbase:=FindFileBD('BDMyWorld.mdb',ConStr,dlgBD);
if sbase<>'' then
begin
ADOQuery1.Active :=False;
ADOQuery1.ConnectionString :=ConStr;
ADOQuery1.Active :=True;
NameSortField:=DBGrid1.Columns[0].FieldName;Desc:=False;
NewQuerySQL;
end
else Application.Terminate;
end;
Проект компиляциясын (CTRL+F9) орындаңыз. Егер де қате болмаса проекті сақтаңыз, меню қатарынан File, Close All таңдап бағдарламаның жұмысын тексеріңіз оны проводник арқылы жібересіз.
Бағдарлама дұрыс жұмыс істейтініне көз жеткізіңіз, файл BDMyWorld.mdb бағдарлама сақталған жерде тұрса. Ол үшін бір жерде Temp папкасын құрып оған BDMyWorld.mdb файлын және MyWorld.exe көшіріп алыңыз.
Temp папкасынан BDMyWorld.mdb файлын жойып тастап MyWorld.exe қайта жіберіңіз.
Осы терезеде өз папкаңызға барыңыз да BDMyWorld.mdb файлын тауып, «Открыть» батырмасын басыңыз және бағдарламаның дұрыс жұмыс істейтініне көз жеткізіңіз.
Бағдарламаны жауып оны проводник арқылы ашыңыз. Пайда болған диалогты терезеде «Отмена» батырмасын басыңыз, сол кезде экранда келесідей мәлімет шығуы керек:
Енді Temp папкасына BDMyWorld.mdb файлын көшіріп алып, MyWorld.exe қайта ашыңыз. Бағдарлама ешқандай кедергісіз жұмыс жасауы керек.
INI-файлдары (Теориялық мәлімдемелер)
МҚ – ын оқыту сыныбының басты жүйелік компьютеріне орналастыру керек деп жорамалдайық, ал басқа компьютерлерге тек қана бағдарламаны ғана қоямыз (файл – сервер әдісі).
Бағдарламаны ашу барысында ол әр дайым оқыту компьютерлерінде МҚ – ын іздеу жайлы диалогты терезесін шығарып отырады, қолданушыға ол кедергі туғызады.
Осы жағдайдын алдын алу шартына INI-файлын қолдану болып табылады.
Бұл файлдар көптеген ОЖ Windowsта басқа да бағдарламаларды құру жағдайда қолданылады.
Delphi – да INI-файлмен жұмыс «TIniFile» классының «inifiles» модулі арқылы жүзеге асады.
INI –файлдарында секциялар мен кілттер бар, оларды аттары арқылы табады. Windows папкасынан TELEPHON.INI мәліметтер файлын мысалға келтірейік:
[Providers]
NumProviders=2
NextProviderID=3
ProviderID0=1
ProviderFilename0=UNIMDM.TSP
ProviderID1=2
ProviderFilename1=WAN.TSP
[Provider1]
NumLines=1
NumPhones=0
[HandoffPriorities]
RequestMakeCall=DIALER.EXE
Құрылған файлда 3 секция - [Providers], [Provider1] және [HandoffPriorities] бар екендігін көреміз. Секция аттары тік төртбұрышты жақшаға алынған. Секциялар ішінде кілттер орналастырылған, әрбір жолдын теңсіздіктен кейін сол жағынан кілттің аты, ал оң жағынан оның мағынасы.
Негізгі TiniFile кластарына келесілер жатады:
Create
|
Ini-файлын оқу немесе жазу үшін ашу
|
Free
|
Ашылған Ini-файлын жабу
|
UpdateFile
|
Файлдан дискіге берілген мәліметтерді жаңарту
|
SectionExists
|
Берілген секцияда файлдын бар екендігін тексеру
|
ValueExists
|
Берілген секцияда кілттін файлда бар екендігін тексеру
|
ReadSections
|
Барлық секциялар бар екендігін алу
|
EraseSection
|
Берілген секцияны оның барлық кілттерімен жою
|
DeleteKey
|
Берілген секцияда кілтті жою
|
ReadSection
|
Берілген секцияның кілттерін алу
|
ReadSectionValues
|
Берілген секцияның барлық кілттерінің (аттарымен) мағынасын алу
|
ReadString
|
Жолдық мағынадан кілттер арқылы берілген секцияның оқу
|
ReadBool
|
Логикалық мағынадан кілттер арқылы берілген секцияның оқу
|
ReadDate
|
Кілт арқылы берілген секцияда күнді оқу
|
ReadDateTime
|
Кілт арқылы берілген секцияда күнді және уақытты оқу
|
ReadFloat
|
Кілт арқылы берілген секцияда анықталғанды оқу
|
ReadInteger
|
Кілт арқылы берілген секцияда бүтін мағынасын оқу
|
ReadTime
|
Кілт арқылы берілген секцияда уақытты оқу
|
WriteString
|
Кілт арқылы берілген секцияда (жаңару) жолдық мағынасын жазу
|
WriteBool
|
Логикалық жазбаны берілген секцияның кілтіне жазу
|
WriteDate
|
Күнді берілген секцияның кілтіне жазу
|
WriteDateTime
|
Уақыт пен күнді берілген секцияның кілтіне жазу
|
WriteFloat
|
Анықталғанды берілген секцияның кілтіне жазу
|
WriteInteger
|
Бүтін мағынаны берілген секцияның кілтіне жазу
|
WriteTime
|
Уақытты берілген секцияның кілтіне жазу
|
Достарыңызбен бөлісу: |