如何用adoquery读取一个.sql文件,并运行?
如题,在线等待!!

解决方案 »

  1.   

    我也是用这个阿,但是adoquery1.ExecSQL;之后,就会跳出错误“‘ ’附近有语法错误”
    读取的文件内容如下:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dcn04]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[dcn04]
    GO
    CREATE TABLE [dbo].[dcn04] (
    [nbf01c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf02c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf03c] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf04c] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf05c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf06d] [datetime] NULL ,
    [nbf07d] [datetime] NULL ,
    [nbf08f] [float] NULL ,
    [nbf09f] [float] NULL ,
    [nbf10f] [float] NULL ,
    [nbf11f] [float] NULL ,
    [nbf12c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf13c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf14c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf15c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf16c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf17c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf18d] [datetime] NULL ,
    [nbf19c] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf20c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf21c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf22f] [float] NULL ,
    [nbf23f] [float] NULL 
    ) ON [PRIMARY]GO
      

  2.   

    当然了会了
    首先格式不一样的,首先,query控件作为一个单独的事物,不能含有go关键字另外:你把sql文件里的所有'变成两个单引号即''(不是双引号)在运行一下
      

  3.   

    现在sql文件是这样的了,还是不行,还是这个错误:‘ ’附近有语法错误
    if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[dcn04]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)
    drop table [dbo].[dcn04]CREATE TABLE [dbo].[dcn04] (
    [nbf01c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf02c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf03c] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf04c] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf05c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf06d] [datetime] NULL ,
    [nbf07d] [datetime] NULL ,
    [nbf08f] [float] NULL ,
    [nbf09f] [float] NULL ,
    [nbf10f] [float] NULL ,
    [nbf11f] [float] NULL ,
    [nbf12c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf13c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf14c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf15c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf16c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf17c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf18d] [datetime] NULL ,
    [nbf19c] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf20c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf21c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf22f] [float] NULL ,
    [nbf23f] [float] NULL 
    ) ON [PRIMARY]
      

  4.   

    哦,弄错了,sorry
    不用改引号,只需去掉go
      

  5.   

    改成简单点的这样(执行一样),你看行不行.
    if exists (select * from dbo.sysobjects where name = 'dcn04'
    drop table [dbo].[dcn04]CREATE TABLE [dbo].[dcn04] (
    [nbf01c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf02c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf03c] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf04c] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf05c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf06d] [datetime] NULL ,
    [nbf07d] [datetime] NULL ,
    [nbf08f] [float] NULL ,
    [nbf09f] [float] NULL ,
    [nbf10f] [float] NULL ,
    [nbf11f] [float] NULL ,
    [nbf12c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf13c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf14c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf15c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf16c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf17c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf18d] [datetime] NULL ,
    [nbf19c] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf20c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf21c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf22f] [float] NULL ,
    [nbf23f] [float] NULL 
    ) ON [PRIMARY]
      

  6.   

    很明显这样是不行的,adoquery只能执行单条sql语句,搂主,你的那段能算是单条sql语句吗?
      

  7.   

    不好意思,少了右括号if exists (select * from dbo.sysobjects where name = 'dcn04')
    drop table [dbo].[dcn04]CREATE TABLE [dbo].[dcn04] (
    [nbf01c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf02c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf03c] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf04c] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf05c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf06d] [datetime] NULL ,
    [nbf07d] [datetime] NULL ,
    [nbf08f] [float] NULL ,
    [nbf09f] [float] NULL ,
    [nbf10f] [float] NULL ,
    [nbf11f] [float] NULL ,
    [nbf12c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf13c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf14c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf15c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf16c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf17c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf18d] [datetime] NULL ,
    [nbf19c] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf20c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf21c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf22f] [float] NULL ,
    [nbf23f] [float] NULL 
    ) ON [PRIMARY]
      

  8.   

    不应该只执行单行的吧?
    我可以用adoquery.sql.add();add一堆sql语句阿(当然好像sql是有长度限制的)
      

  9.   

    to pigjacs(岁月无知) 试过了,不行……
      

  10.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dcn04]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[dcn04]CREATE TABLE [dbo].[dcn04] (
    [nbf01c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf02c] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf03c] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [nbf04c] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf05c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf06d] [datetime] NULL ,
    [nbf07d] [datetime] NULL ,
    [nbf08f] [float] NULL ,
    [nbf09f] [float] NULL ,
    [nbf10f] [float] NULL ,
    [nbf11f] [float] NULL ,
    [nbf12c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf13c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf14c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf15c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf16c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf17c] [char] (5) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf18d] [datetime] NULL ,
    [nbf19c] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf20c] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf21c] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [nbf22f] [float] NULL ,
    [nbf23f] [float] NULL 
    ) ON [PRIMARY]
    ------------------------------------------------〉c:\a.sql;  adoquery1.SQL.Clear;
      adoquery1.SQL.LoadFromFile('c:\a.sql');
      adoquery1.ExecSQL;----------------------------------------------->ok
      

  11.   

    to jinjazz(三个小时上下班) ,你可以?把你调用的那段代码给我看看好么?
      

  12.   

    谢谢jinjazz(三个小时上下班),我也这么测试过了,我现在不知道是什么原因,可能是我个人的其他配置有问题,谢谢你们大家了,凡说得对的都有分!再次谢谢!
      

  13.   

    使用memo、adocommand组件
    var ifiles:textfile;
    ss:string;
    label Sqldo;
    begin
       AssignFile(ifiles,'dd.SQL');
       reset(ifiles);
       while not eoln(ifiles) do begin
          memo1.lines.clear;
          while not eoln(ifiles) do begin
             ReadLn(ifiles,ss);
             if ss='GO' then goto Sqldo;
             Memo1.Lines.add(ss);
          end;
          Sqldo:
          ADOCommand1.CommandText:=memo1.Text;
          ADOCommand1.Execute;
       end;
       closefile(ifiles);
    end;
      

  14.   

    你这个建表的sql语句是不是直接从数据库里面导出来的?
    你直接把语句拷到adoquery那个sql里面去,不要用文件导入进去,运行下看行不行.
      

  15.   

    你新建一个程序,只要一个adoconnection和一个adoquery试一下
      

  16.   

    我发现文件大小不一样,你那个a.sql文件只有1.几K,我的有2.6k之多,但是我看内容都一样,,没办法,你的可以执行,我的酒不行,怪了,我得再看看!