Sql 使用查询一次加载多个值
我正在使用一个用Delphi7编写的程序(遗憾的是,我不能为这个程序使用更新的版本),它考虑到个人。对于每个人,我需要加载一组值(最多0到90,具体数字取决于人;非固定值),这些值稍后将在代码中使用。在尝试了很多事情之后,包括通过Excel加载(速度非常慢),有人建议通过Access加载数据。到目前为止,我成功地获得了以下代码:Sql 使用查询一次加载多个值,sql,delphi,Sql,Delphi,我正在使用一个用Delphi7编写的程序(遗憾的是,我不能为这个程序使用更新的版本),它考虑到个人。对于每个人,我需要加载一组值(最多0到90,具体数字取决于人;非固定值),这些值稍后将在代码中使用。在尝试了很多事情之后,包括通过Excel加载(速度非常慢),有人建议通过Access加载数据。到目前为止,我成功地获得了以下代码: MainConnection : TADOConnection; Table : TADOTable; StrConnection
MainConnection : TADOConnection;
Table : TADOTable;
StrConnection : String;
//I first open a connection to load the values in from
MainConnection:=TADOConnection.Create(nil);
StrConnection:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb;Mode=Read;Persist Security Info=False;';
MainConnection.LoginPrompt:=False;
MainConnection.ConnectionString:= StrConnection;
MainConnection.Connected:=True;
Table:=TADOTable.Create(nil);
Table.Connection :=MainConnection;
Table.TableName := 'Sheet1';
Table.Open;
// I get the first three values which I absolutely require
Firstvalue := Table.Fields[0].value;
Secondvalue := Table.Fields[1].value;
Thirdvalue := Table.Fields[2].value;
//Whether I need additional values depends on the first and second values; if the first is a specific value
// I do not need any of the other ones
nrofvaluestoget := round((Secondvalue-Firstvalue));
if (Firstvalue = 100) then nrofvaluestoget:= 0;
if (nrofvaluestoget>0) then begin
for k := 0 to (nrofvaluestoget) do begin
Valueholder[k] := Table.Fields[5+k].value; ; // values for the valueholder
Table.Next; //Go to next person
这链接了access数据库,在技术上实现了我想要的功能。然而,尽管它比加载excel文件快,但由于“nrofvaluestoget”循环,它仍然相当慢。跳过这一点并同时为一个人加载所有值将大大加快这个过程
据我所知,这可能是使用SQL查询实现的;类似于“从Sheet1中选择*”的内容。然而,我并不熟悉SQL,更不用说通过Delphi7链接它了。是否有可能一次获取所有值,并使用Delphi 7立即将其分配给“值持有人”?或者至少,有没有什么方法可以加速上面我不知道的代码?任何帮助都将不胜感激
编辑:
根据Per Juan的建议,我添加了一些关于数据库的附加说明
我发布了一张图片作为数据库的示例,因为我无法嵌入一张图片或创建一个外观良好的表
假设我有三个人。第一个人的第一个年龄是15岁,第二个年龄是16岁。
在当前循环中,Valueholder在索引0处的值为2,在索引1处的值为0。Person 1没有其他具有值的年龄,因此循环中不考虑这些值
当对下一个人进行评估时,Valueholder的所有指数均设置为其基准值(空白)
第二个人的第一个年龄是18岁,第二个年龄是20岁。然后,Valueholder获得3个值,即:索引0处的值8、索引1处的值4和索引2处的值2
对于最后一个人,Valueholder的所有指数再次重置为其基准值
第三人的第一年龄为100岁;这表示此人没有需要加载的值,因此Valueholder为空
我希望这能澄清一点问题。(如果这是一次性导入)
我建议将数据导出到csv文件,并使用TFileStream在Delphi程序中读取它。这比连接Access、SQL server或任何数据库都要快。欢迎使用stackoverflow。向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。