在Delphi里有个SQL Explorer 在这里面可以直接运行sql语句。
在ODBC里注册一个数据源,
运行update 一个表中的一条记录,(我用的是ACCESS表,只能用这中数据库),正确执行后,马上打开ACCESS数据库看那个表,过了好一会儿修改的那条记录才改变,我想这是延时。
怎么解决这个延时问题?实际上是我在Delphi里用ADO控件,修改记录,再查看,看不到修改后的情况,因为它根本还没有保存,就是上面我说的延迟问题。
具体是这样的:
ADOQ1.sql.text:='update *********';
ADOQ1.ExecSQL;ADOQ2.sql.text:='select * from table1';
ADOQ2.Open;
有个DBGrid连接ADOQ2;
那位高人知道解决的办法?
我用的Delphi +ACCESS

解决方案 »

  1.   

    试一下这样:
    ADOConnection1.BeginTrans;
    ADOQ1.sql.text:='update *********';
    ADOQ1.ExecSQL;
    ADOConnection1.CommitTrans;ADOQ2.sql.text:='select * from table1';
    ADOQ2.Open;
      

  2.   

    ADOConnection1.BeginTrans;
    ADOQ1.sql.text:='update *********';
    ADOQ1.ExecSQL;
    ADOConnection1.CommitTrans;ADOQ2.sql.text:='select * from table1';
    ADOQ2.Open;
      

  3.   

    楼主今天才来看,不好意思。
    我试了,可以,谢谢。另外问个问题不知道可不可以?delete table1.*,table2.* from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate>=2005-04-15 and table1.FDate<2005-04-21为什么这句话能够执行,却没有删掉符合条件的记录????而下面这句话则可以:
    delete table1.*,table2.* from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate>=2005-04-15 他们之间的不同就是日期判断这里,第一个是个日期区间,第二个只有一个日期条件判断。你看?是不是我那里想错了、?
      

  4.   

    delete table1.*,table2.* from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate>=2005-04-15 and table1.FDate<2005-04-21条件的问题
    在>=2005-04-15 and <2005-04-21这个区间内可能没有符合where table1.field1=table2.field1 and table1.field2=table2.field2 条件的数据吧
      

  5.   

    TO: comerliang(天地良心)
    有符合条件的数据,,,
    如果你装了Delphi可以在它的SQL explorer里面试试。
    我试的老是不行。
    刚才又试了
    delete table1.*,table2.* from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate<=2005-06-15也不行。
    语句执行没有报错。但是就是没有把符合条件的记录删去。
    为什么???
      

  6.   

    sql server查询分析器里
    把时间用单引号括起来就可以了,否则结果不对
      

  7.   

    table1.FDate<=2005-06-15  //类似这样的要修改一下——〉table1.FDate<='2005-06-15'
      

  8.   

    ADOQ2.Close;
    先關掉數據集才能open,不然OPEN沒有意義。
      

  9.   

    我用的ACCESS数据库,这个前提,我再次声明一下。 我确信这语句肯定有错。 因为我刚才又试了。
    select * from table1 where FDate<2005-5-16 一条记录也没有查询出来。(我的记录都是在2005-5月以前的,肯定有符合条件的记录)
    我猜,肯定是日期型字段,有个特殊的格式TO: YAMABACK(披荆斩棘,努力前进!) 
    我要是加上小引号,就会报错。"标准表达式中数据类型不匹配"
      

  10.   

    行了。
    俺终于知道怎么回事了。
    要加个符号。例如FDate<#2005-5-16#谢谢各位的帮助。
    尤其是 comerliang(天地良心) ( )
      

  11.   

    唉!真是的。在SQL explorer中可以了,可是在Delphi中还有点问题。
    就是当table1he
    就是当table1和table2中所有的记录都满足条件的时候,删除所有的记录有错。
    ADOQ1.sql.text:='delete table1.*,table2.* from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate>=#2005-04-15# and table1.FDate<#2005-04-21#';
    ADOQ1.ExecSQL;执行到EXecSQL报错,××ב记录被删除。’,Process stopped。Use Step or Run to continue。如果不是所有的记录都满足条件就不会报错?但是难道不允许清空表?
      

  12.   

    对access不熟,不知道它的时间类型字段该怎么处理
      

  13.   

    我在SQL explorer中可以了。就是在SQL explorer中执行两个表都清空的命令可以。
    但是在Delphi中,就像上面我说的
    ADOQ1.sql.text:='delete table1.*,table2. from table1,table2 where table1.field1=table2.field1 and table1.field2=table2.field2 and table1.FDate>=#2005-04-15# and table1.FDate<#2005-04-21#';
    ADOQ1.ExecSQL;
    就会报错
    我大体测试了一下,可能是我的table1表中有重复的记录的原因,如果table1中没有重复的记录就不会报错。可是我的table1中必需有重复的记录怎么办?