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

  • 主题发起人 主题发起人 DreamTiger
  • 开始时间 开始时间
D

DreamTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用TQuery查询一个数据库,要求纪录的TMEMO型字段Sequence
包含我提供的某个字符串sShortSequence,用SQL怎么写?
 
不就是这个吗?
SELECT * FROM xxx WHERE memo LIKE '%sShortSequence%'
 
caKK好快呀~~~~~~~~
对,可以用% LIKE来匹配
 
如果我有多个sShortSequence,希望找出其中包含最多的一个纪录,
比如说有5个sShortSequence,可能有一个纪录的Sequence中包含了
其中4个sShortSequence,其它都是包含3个以下的,那么,怎么把
它选出来?
 
用一条sql语句是无法完成的,建议用存储过程.
 
也可以在程序中判断
 
cAKK:你说的存储过程是指什么?保存到硬盘?还是
保存每次查询结果到临时库?我想保留查询结
果的前十位(按包含sShortSequence的多少)
怎么针对上次查询结果作查询?数据库现在刚
开始学,如果提得太简单,不要笑我,呵呵。
 
cakk: sp也不能做到:-(
 
那就只有自己用程序判断了. :-(
 
猛虎:
>找出其中包含最多的一个纪录
这并不难,自己写个小函数,统计一下
一个窜中有多少子窜
function substrcount(l:string):integer;
然后循环一遍记录把最多的记录的关键字记下来就行了
 
lhxu:我就是不想遍历才没用TTable,想用TQuery的。呵呵。
cytown:你说的sp是什么意思?(我很土哦,呵呵。)

难道没有方便的办法在上一次查询基础上再次查询?
 
sp -> Store Procedure (存储过程)

>>难道没有方便的办法在上一次查询基础上再次查询?
如果是Sql server,可以用视图 create View
 
又出怪事了(也许是我不懂的事太多,也许是我的错):
我在程序中设定了一个Query2,用于查询:
这是它的SQL:用SQL Builder做出来的:

SELECT SeqID, SeqName, SeqDate, SeqContent, SeqLength, Sequence
FROM "SwissProt.db" Swissprot
WHERE Sequence LIKE '%EAMAPK%'

在SQL Builder中,如果我让它运行,它会运行(硬盘狂转不止),
但是在我的程序中,它却毫无反应:

procedure TForm1.QueryBtnClick(Sender: TObject);
begin
if not Table1.Exists then
begin
NewBtn.Click;
exit;
end;

if(bDatabaseOpened) then
begin
Table1.Close;
bDatabaseOpened := false;
end;

DataSource1.DataSet := Query2;

Query2.ExecSQL;
//运行这一句的时候,硬盘都不响,什么反应都没有,怎么回事?
end;

 

Query2.ExecSQL
换为query2.open
 
我的库有50000多条纪录,我用了cAKK的方法,就查一个sShortSequence,
在我的PII450+128M上,跑的恶慢,跟老牛拉破车一样,至少得几分钟。
而在Unix下,用grep的方法,只要几秒钟就可以了,sigh。难道我真的不
应该用数据库?
 
什么数据库? 什么方式连接的?
 
cAKK:本地的Paradox数据库。
 
看了一些以前关于数据库的讨论,好像paradox很差,
所以我现在用dbase的试试看。cAKK你一直在用access,
速度跟dbase比的话怎么样?如果我用oracle for NT,
速度是不是会快一些?
 
Access也很慢,不过因为我一直是用纯ODBC访问的.
所以我现在准备改用DAO访问,速度很快哦! 我以前用VB时是深有体会.
 
而且,用DAO可以充分利用DAO的强大功能,好处很多.确实怀念以前用VB做Access
数据库程序的时候.

以后我要开始吹嘘DAO了... :-)
 
后退
顶部