Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用查询一次加载多个值_Sql_Delphi - Fatal编程技术网

Sql 使用查询一次加载多个值

Sql 使用查询一次加载多个值,sql,delphi,Sql,Delphi,我正在使用一个用Delphi7编写的程序(遗憾的是,我不能为这个程序使用更新的版本),它考虑到个人。对于每个人,我需要加载一组值(最多0到90,具体数字取决于人;非固定值),这些值稍后将在代码中使用。在尝试了很多事情之后,包括通过Excel加载(速度非常慢),有人建议通过Access加载数据。到目前为止,我成功地获得了以下代码: MainConnection : TADOConnection; Table : TADOTable; StrConnection

我正在使用一个用Delphi7编写的程序(遗憾的是,我不能为这个程序使用更新的版本),它考虑到个人。对于每个人,我需要加载一组值(最多0到90,具体数字取决于人;非固定值),这些值稍后将在代码中使用。在尝试了很多事情之后,包括通过Excel加载(速度非常慢),有人建议通过Access加载数据。到目前为止,我成功地获得了以下代码:

 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。向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。