2013-10-17 64 views
0

我有一個空表訪問並添加數據與SQL INSERT語句。之後我使用過程通過表並使用ADO將所有值放入一個對象數組。如何在插入第一條記錄並將其添加到對象的數組後將表「保存」?

調試後,我可以看到該過程沒有找到表中的任何值,並說表是在EOF,並沒有提取任何值的表。但是,如果我終止我的應用程序(關閉程序)並再次運行它,它似乎已經「插入」和「保存」訪問中的表,然後在表中查找值並使用ADO解析它,並且將它插入到對象數組中。

不知何故,我需要通過德爾福惱火「拯救」訪問數據庫

//inserts the new(first and following) records 
begin 
    qryVote.Active := False; 
    qryVote.SQL.Text := 'insert INTO tblkandidate ([Leerder nr],Van,Naam,geboortedatum,[id nr],geslag,[sel nr],debietpunte,voogklas,deelname,stemme) VALUES ("'+leerdernr+'","'+van+'","'+naam+'",#'+gebdatum+'#,"'+idnr+'","'+geslag+'","'+selnr+'",'+inttostr(debiete)+',"'+voogklas+'","'+booltostr(bsport)+'",'+inttostr(stemme)+') '; 
    qryVote.ExecSQL; 
    qryVote.SQL.Text := 'select * from tblkandidate'; 
    qryVote.Active := true; 

    KandidateNaSkik; //procedure that goes through the table and puts every record into the array of objects (see below foe precedure) 
    showmessage('Jou pesoonlike data is gestoor'); 
end; 

procedure Tfrmvote.KandidateNaSkik; 
var 
    leerdernr,naam,van,idnr,selnr,voogklas,gebdatum,geslag : STRING; 
    stemme, debiete: integer; 
    bsport, gestem : boolean; 
begin 

frmvote.ADOTableVotek.open; 

with dbgviewp.DataSource.DataSet do 
begin 
    frmvote.ADOTableVotek.first; 

    iaantkan :=0; 

    while not frmvote.ADOTableVotek.EOF do  
    begin 

    inc(iaantkan); 
    leerdernr := frmvote.ADOTableVotek['LEERDER NR']; 
    van := frmvote.ADOTableVotek['VAN']; 
    naam := frmvote.ADOTableVotek['NAAM']; 
    gebdatum := frmvote.ADOTableVotek['geboortedatum']; 
    idnr := frmvote.ADOTableVotek['id nr']; 
    geslag := frmvote.ADOTableVotek['geslag']; 
    selnr := frmvote.ADOTableVotek['sel nr']; 
    debiete := frmvote.ADOTableVotek['debietpunte']; 
    voogklas := frmvote.ADOTableVotek['voogklas']; 
    bsport := frmvote.ADOTableVotek['deelname']; 
    stemme := frmvote.ADOTableVotek['stemme']; 
    gestem := frmvote.ADOTableVotek['gestem']; 

    //the above variables get sent to the array below 

    arrkandidaat[iaantkan] := tVerkiesing.create(leerdernr, van, naam, 
     gebdatum,idnr,geslag,selnr,debiete,voogklas,bsport,gestem,stemme); 

    frmvote.ADOTableVotek.Next; 
end;{while} 

end;{with} 

end; 
+0

非常感謝!像一個魅力 –

+1

工作,你說這個答案?如果它對你有幫助,你應該'接受'。 – kobik

回答

1

爲了反映更改嘗試關閉並重新打開數據集,像這樣

frmvote.ADOTableVotek.Close; 
frmvote.ADOTableVotek.Open; 
3

既然你插入通過qryVote.ExecSQL記錄,ADOTableVotek數據集劑量不知道新記錄已添加到數據庫,因此要麼撥打電話:

frmvote.ADOTableVotek.Requery; 

例如爲:

procedure Tfrmvote.KandidateNaSkik; 
begin 
    ... 
    if not frmvote.ADOTableVotek.Active then 
    frmvote.ADOTableVotek.Open 
    else 
    frmvote.ADOTableVotek.Requery; 
    ... 
end; 

或通過ADOTableVotek本身這樣添加新的紀錄:

ADOTableVotek.Append; // add new record 
ADOTableVotek.FieldByName('Leerder nr').AsString := leerdernr; 
// ADOTableVotek.FieldByName('etc..')... 
// etc... 
ADOTableVotek.Post; // post new record to the DB 

的變化將反映到imedeatlly和ADOTableVotekdbgviewp
這樣ADOTableVotek可以始終處於活動狀態。您只需撥打ADOTableVotek.Open一次(或設置ADOTableVotek.Active := True)。每次插入新記錄時,都不需要從數據庫中提取所有記錄。

相關問題