使用查询

时间:2017-09-05 13:59:43

标签: sql delphi

我正在使用Delphi 7中编写的程序(遗憾的是我不能使用此程序的新版本)来考虑个人。对于每个人,我需要加载一堆值(最多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

这链接了访问数据库,从技术上来说就是我想要的。然而,虽然它比在excel文件中加载更快,但由于“nrofvaluestoget”循环,它仍然很慢。跳过那个并立即加载一个人的所有值会加快这个过程。

据我所知,这可能是使用SQL查询;类似于:'SELECT * FROM Sheet1'。但是,我不熟悉SQL,更不用说通过Delphi 7链接它了。是否有可能立即获取所有值并立即将它们分配给Delphi 7的“Valueholder”?或者至少,是否有某种方法可以加快上面我不知道的代码?任何帮助将不胜感激。

编辑:

Per Juan的建议我添加了一些关于数据库的其他描述。

我发布了一张图片作为数据库的示例,因为我无法嵌入或创建一个像样的表。 Example table

假设我有三个人。人1将有15岁作为第一年龄,16岁作为第二年龄。 在当前循环中,Valueholder将在索引0处具有值2,在索引1处具有值0. Person 1没有具有值的其他年龄,因此在循环中不考虑这些。

评估下一个人时,所有Valueholder的指数都设置为基值(空白)。

第2个人有18个为第一个年龄,20个为第二个年龄。然后,Valueholder获得3个值,即:索引0处的值8,索引1处的值4以及索引2处的值2.

对于最后一个人,Valueholder的所有指数再次重置为其基值。

第3人有100岁为第一年龄;这表明此人没有需要加载的值,因此Valueholder为空

我希望这会澄清一下这个问题。

1 个答案:

答案 0 :(得分:-1)

(如果这是一次性导入) 我建议将数据导出到csv文件,并使用TFileStream在Delphi程序中读取它。这比连接到Access或SQL服务器或任何数据库要快。