急!哪位高手老师帮助我解决一个Paradox数据库难题啊!!先在此致谢了。 ( 积分: 100 )

  • 主题发起人 主题发起人 sq68686
  • 开始时间 开始时间
S

sq68686

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将36个数字所有7的800余万的组合(形式如福利彩票36选7),用递归函数组合出来的同时将它们自动导入Paradox数据库中去。递归函数我已经写好了,非常好用。我用Delphi试着写了一个导入程序,也没有错,但总是导不进去,运行到Form1.Memo1.Lines.Add(tmpStr);处总卡住”。恳请高手老师帮忙!!!最好在指出思路的同时,将具体的导入程序代码写出来。我是新手,水平不高。在此十分感谢!!!
下面是全部程序:请高手老师帮助看一下,问题出在哪儿了?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
StaticText1: TStaticText;
Table1: TTable;
Query1: TQuery;
Database1: TDatabase;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
procedure Button3Click(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure Edit2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
GIDX:array[1..20] of integer; // 记录下标的数组。

implementation

{$R *.dfm}
procedure MyRecur(Total,SelCnt,BLoc,ELoc:integer);
var
idx,jjj:integer;
tmpStr:string;
begin
if (ELoc=Total) // 终止状态
then
begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 注意此处应与下面 8888处一致
tmpStr:='';
for jjj:=1 to SelCnt do
begin
if(tmpStr='')
then
begin
tmpStr:=IntToStr(GIDX[jjj]);
end
else
begin
tmpStr:=tmpStr+','+IntToStr(GIDX[jjj]);
end
end;
Form1.Query1.SQL.Clear;
Form1.Query1.SQL.Add('insert into datadb (Dataid,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Datalb) ');
Form1.Query1.SQL.Add(' values ('+tmpStr+',1)');
Form1.Query1.ExecSQL;
Form1.Memo1.Lines.Add(tmpStr);
end;
end
else
begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 8888
MyRecur(Total,SelCnt,idx+1,ELoc+1);
end;
end;
end;
procedure SelNumber(Total,SelCnt:integer); //Total为基数,SelCnt为选取数
begin
if (Total<1) or (Total<SelCnt)
then
begin
ShowMessage('数据不正确!');
Exit;
end;
MyRecur(Total,SelCnt,1,Total-SelCnt+1);// 最初第三个参数总为1
end;

procedure TForm1.Button3Click(Sender: TObject);
var
ttl,sel:integer;
begin
Memo1.Clear;
ttl:=StrToInt(Edit1.Text);// 请自己加上对TEdit的容错处理。
sel:=StrToInt(Edit2.Text);
StaticText1.Caption:='程序运行中……';
SelNumber(ttl,sel);

end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.Text:='';
end;

procedure TForm1.Edit2Click(Sender: TObject);
begin
Edit2.Text:='';
end;
end.
 
如何将36个数字所有7的800余万的组合(形式如福利彩票36选7),用递归函数组合出来的同时将它们自动导入Paradox数据库中去。递归函数我已经写好了,非常好用。我用Delphi试着写了一个导入程序,也没有错,但总是导不进去,运行到Form1.Memo1.Lines.Add(tmpStr);处总卡住”。恳请高手老师帮忙!!!最好在指出思路的同时,将具体的导入程序代码写出来。我是新手,水平不高。在此十分感谢!!!
下面是全部程序:请高手老师帮助看一下,问题出在哪儿了?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
StaticText1: TStaticText;
Table1: TTable;
Query1: TQuery;
Database1: TDatabase;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
procedure Button3Click(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure Edit2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
GIDX:array[1..20] of integer; // 记录下标的数组。

implementation

{$R *.dfm}
procedure MyRecur(Total,SelCnt,BLoc,ELoc:integer);
var
idx,jjj:integer;
tmpStr:string;
begin
if (ELoc=Total) // 终止状态
then
begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 注意此处应与下面 8888处一致
tmpStr:='';
for jjj:=1 to SelCnt do
begin
if(tmpStr='')
then
begin
tmpStr:=IntToStr(GIDX[jjj]);
end
else
begin
tmpStr:=tmpStr+','+IntToStr(GIDX[jjj]);
end
end;
Form1.Query1.SQL.Clear;
Form1.Query1.SQL.Add('insert into datadb (Dataid,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Datalb) ');
Form1.Query1.SQL.Add(' values ('+tmpStr+',1)');
Form1.Query1.ExecSQL;
Form1.Memo1.Lines.Add(tmpStr);
end;
end
else
begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 8888
MyRecur(Total,SelCnt,idx+1,ELoc+1);
end;
end;
end;
procedure SelNumber(Total,SelCnt:integer); //Total为基数,SelCnt为选取数
begin
if (Total<1) or (Total<SelCnt)
then
begin
ShowMessage('数据不正确!');
Exit;
end;
MyRecur(Total,SelCnt,1,Total-SelCnt+1);// 最初第三个参数总为1
end;

procedure TForm1.Button3Click(Sender: TObject);
var
ttl,sel:integer;
begin
Memo1.Clear;
ttl:=StrToInt(Edit1.Text);// 请自己加上对TEdit的容错处理。
sel:=StrToInt(Edit2.Text);
StaticText1.Caption:='程序运行中……';
SelNumber(ttl,sel);

end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.Text:='';
end;

procedure TForm1.Edit2Click(Sender: TObject);
begin
Edit2.Text:='';
end;
end.
 
问题应该出在这里

Form1.Query1.SQL.Clear;
([red]Form1.Query1.SQL.Add('insert into datadb Dataid,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Datalb) ');
Form1.Query1.SQL.Add(' values ('+tmpStr+',1)');[/red]

Form1.Query1.ExecSQL;
你的目标表里有几个字段,而你提供的值只有一个字段!
 
多谢这位老师!!在您的开导下终于解决了。
 
后退
顶部