这种查询sql可以做到吗?(52分)

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
呵呵, dao确实用在access上非常快, 就是功能差些:-(
 
我用import type library导入了DAO3.6,在程序中怎么用?
想安装Diamond,但它是for D4的,我用的是D5。

看了以前有关DAO的几篇文章,也没能看出所以然来。
对于:
dbe1:DAO_TLB._dbengine;
db1:DAO_TLB.database;
怎么创建实例?
dbe1和db1都为nil,DAO_TLB._dbengine又不支持Create,该怎么办?

这个问题已经延续到DAO了,我会另外加分的。
 
DAO功能还差? DAO可是专门为Access开发出来的,只有DAO才能真正发挥Access的功能!!!
 
我没有直接倒入过dao的类型库.如果我用dao,我准备用diamond.

在vb里,dbengine是自动的,不用创建.而且创建了好像也什么没用.
 
另外,access97应该是dao3.5才对吧? 3.6好像是access2000?
 
这个问题就这样了,有关DAO的问题我会另开一个问题。
 
是啊,我装了WIN2K,OFFICE2K,DELPHI5,呵呵。
另外还有个dao3.51,不知道是从哪里来的。
 
这个问题解决了,虽然比较笨拙:
我在数据库中新建了一个表,专门用于纪录查询结果:
Access数据库:SwissProt.mdb
包含两个表:
Sequences:主表:包含所有信息(SeqID,SeqName,SeqDate,SeqContent,SeqLength,Sequence)
SeqMatch:纪录查询结果(SeqID,SeqMatchCount)

多行查询时:
procedure TForm1.QueryBtnClick(Sender: TObject);
var
tslSequence:TStringList;
sQuery :string;
begin
with DataModule1 do
begin
Edit1.Text := Trim(Edit1.Text);
if(Edit1.Text = '') then exit;

tslSequence := TStringList.Create;
try
SpliteLines(tslSequence,Edit1.Text);
//一个自己的过程,把Edit1.Text按空格分成几行,存在tslSequence中

if(tslSequence.Count = 1) then
begin
QueryOneSequence(Edit1.Text);//一个Select就解决了。
end
else
begin
QueryMultiSequence(tslSequence);//多个子序列的查找
DAOQuery1.Active := false;
DAOQuery1.SQL.Clear;
sQuery := 'SELECT Sequences.SeqID, Sequences.SeqName, Sequences.SeqDate, Sequences.SeqContent, Sequences.SeqLength, Sequences.Sequence, Seqmatch.SeqMatchCount FROM Sequences Sequences, SeqMatch Seqmatch ';
sQuery := sQuery + 'WHERE Sequences.SeqID = Seqmatch.SeqID ';
sQuery := sQuery + 'ORDER BY Seqmatch.SeqMatchCount DESC, Sequences.SeqID';
DAOQuery1.SQL.Text := sQuery;
DAOQuery1.Active := true;
end;
finally
if(Assigned(tslSequence)) then tslSequence.Free;
end;
end;
end;

procedure TForm1.QueryMultiSequence(tslSequences:TStringList);
var
i:integer;
sID,sFindID:string;
iCount:integer;
begin
with DataModule1 do
begin
if(DAOQuery3.Active) then DAOQuery3.Active := false;

//清空结果数据库
DAOQuery3.SQL.Clear;
DAOQuery3.SQL.Text := 'Select SeqID From SeqMatch';
DAOQuery3.Active := true;
DAOQuery3.Edit;
DAOQuery3.First;
while(not DAOQuery3.IsEmpty) do DAOQuery3.Delete;

for i := 0 to tslSequences.Count - 1 do
begin
if(DAOQuery2.Active) then DAOQuery2.Active := false;

DAOQuery2.SQL.Clear;
DAOQuery2.SQL.Text := 'Select SeqID From Sequences WHERE Sequence LIKE "*' + tslSequences.Strings + '*" Order By SeqID';
DAOQuery2.Active := true;

if(DAOQuery2.IsEmpty) then exit;

DAOQuery2.First;
while(not DAOQuery2.Eof) do
begin
sID := DAOQuery2.FieldValues['SeqID'];
DAOQuery2.Next;

DAOQuery3.Active := False;
DAOQuery3.SQL.Clear;
DAOQuery3.SQL.Text := 'SELECT * FROM SeqMatch WHERE SeqID="' + sID + '"';
DAOQuery3.Active := true;

if(DAOQuery3.IsEmpty) then
begin
DAOQuery3.AppendRecord([sID,1]);
end
else
begin
DAOQuery3.Edit;
DAOQuery3.FieldValues['SeqMatchCount'] := DAOQuery3.FieldValues['SeqMatchCount'] + 1;
DAOQuery3.Post;
end;
end;
end;
DAOQuery2.Active := false;
DAOQuery3.Active := false;
end;
end;

不知还有没有什么更好的办法。
 
后退
顶部