gpt4 book ai didi

sql - 使用delphi在 Access 文件末尾不插入记录

转载 作者:行者123 更新时间:2023-12-03 19:30:20 25 4
gpt4 key购买 nike

我用 ADO 读取一个 Access 数据库并将数据复制到另一个具有相同结构的数据库。我的问题是,有时它不会在文件末尾插入。

  DM1.ADOConnectionReadAccess.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' + 'User ID=Admin;' +
'Data Source=' + Directory + 'Courbe\Courbe Actuel.mdb' + ';' +
'Mode=Share Deny None;Extended Properties="";' + 'Jet OLEDB:Engine Type=5;';
DM1.ADOConnectionReadAccess.Connected := true;

DM1.ADODataSetReadAccess.CommandText := 'select * from Courbe_Reservoir order by DateHeure';
DM1.ADODataSetReadAccess.Active := true;

所以我阅读了我的数据库并按日期时间排序。现在,当我将数据复制到新数据库时,我必须对数据进行一些更改。
  DM1.ADOConnectionCopyExcel.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'User ID=Admin;' +
'Data Source=' + Directory + 'Courbe\Part of curve.mdb' + ';' +
'Mode=Share Deny None;Extended Properties="";' +
'Jet OLEDB:Engine Type=5;';
DM1.ADOConnectionCopyExcel.Connected := true;


while not DM1.ADODataSetReadAccess.Eof do
begin
Date2 := DM1.ADODataSetReadAccess.FieldByName('DateHeure').AsDateTime;
DernierDebit := DernierDebit + DM1.ADODataSetReadAccess.FieldByName('DebitRes').AsFloat / 1000;


DM1.ADOCommandCopyExcel.CommandText :=
'INSERT INTO Courbe_Reservoir' + ' VALUES (:DateHeure1, ' +
':Niveau, ' + //niveau
':DebitRes, ' + //débit entrée
':PH, ' + //ph
':Chlore, ' + //Chlore
':Turbidite, ' + //Turbidité
':Temp, ' + //température
'0, ' + //Consommation l/min
'0, ' + //Log
':DernierDebit, ' + //Consommation journalière
'0, 0, 0, '''', '''', ''''' + ')';
DM1.ADOCommandCopyExcel.Parameters.ParamByName('DateHeure1').Value := Date1;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('Niveau').Value := DM1.ADODataSetReadAccess.FieldByName('Niveau').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('DebitRes').Value := DM1.ADODataSetReadAccess.FieldByName('DebitRes').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('PH').Value := DM1.ADODataSetReadAccess.FieldByName('PH').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('Chlore').Value := DM1.ADODataSetReadAccess.FieldByName('Chlore').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('Turbidite').Value := DM1.ADODataSetReadAccess.FieldByName('Turbidite').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('Temp').Value := DM1.ADODataSetReadAccess.FieldByName('Temp').AsFloat;
DM1.ADOCommandCopyExcel.Parameters.ParamByName('DernierDebit').Value := DernierDebit;
DM1.ADOCommandCopyExcel.Execute;
end;

当我检查新数据库时,我在图像中得到以下结果:
Part of access database

正如你所看到的,我有一个时间间隔,因为我每分钟都有一个记录。图像中缺失的记录位于数据库的其他位置。

最后,我想知道为什么它没有按照我插入它们的顺序显示。底线是我想使用导出命令将新的 Access 数据库 (.mdb) 导出到 excel 文件,但导出命令似乎获取 Access 文件并将其复制到 excel,因此无法订购它,因为导出。我不想通过选择再次浏览所有记录并将其一个接一个地插入到excel中。

现在,我有一个包含近 180 000 条记录的文件,我需要每月对其进行拆分,因此新数据库将有大约 44 000 条记录。

谢谢你的帮助

最佳答案

大多数数据库中都没有定义插入位置——数据库引擎可以自由地将数据存储在它认为最合适的地方。它可能会选择将记录添加到表的末尾,但它也可能会选择重用由先前删除的记录腾出的空间。

如果您希望按特定顺序获得结果,则在您的选择查询中指明这一点,通常包括 ORDER BY 子句。

关于sql - 使用delphi在 Access 文件末尾不插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com