数据库创建(100分)

  • 主题发起人 主题发起人 hhycqrm
  • 开始时间 开始时间
H

hhycqrm

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在delphi代码中执行*.sql文件
 
adoquery1.text:=*.sql;
 
with adoquery do
begin
close;
sql.clear;
sql.loadfromfile("Xx.Sql");
try
execsql;
except
open;
end;
end;
 
问题: 利用SQL脚本创建数据库及表、存储过程等的问题!急!! ( 积分: 50 )
分类: 数据库-文件型

来自: shunbing, 时间: 2005-03-11 8:58:00, ID: 3011120
我用程序动态创建数据库,创建数据库成功,但在利用ADO调用从MS SQL中生成的SQL脚本创建表及存储过程时,总是提示脚本第一行出错,脚本在MS SQL 查询分析器中运行是成功的,请问各位大侠这是什么原因??急!

来自: Navy1976, 时间: 2005-03-11 9:05:14, ID: 3011131
要注意单引号的问题,SQL中一个单引号,ADO中要两个

来自: jfyes, 时间: 2005-03-11 9:09:28, ID: 3011139
//把SQL写成文件不可以了吗qy_drcr.SQL.LoadFromFile('c:/test.sql');

来自: shunbing, 时间: 2005-03-11 9:10:29, ID: 3011140
就是在调用*.sql文件创建表及存储过程时提示第一行出错的

来自: jfyes, 时间: 2005-03-11 9:11:02, ID: 3011141
不是用Open,用ExecSQL 或者用ADOCommand组件来执行,比ADOQuery效率高

来自: shunbing, 时间: 2005-03-11 9:13:33, ID: 3011144
用的是ExecSQL,关键是现在不能正确执行,先不考虑效率问题

来自: 坚持信念, 时间: 2005-03-11 9:15:00, ID: 3011148
把*.sql文件里的“GO”去掉,就可以执行了

来自: shunbing, 时间: 2005-03-11 9:16:30, ID: 3011149
GO去掉后也不行

来自: fengfan, 时间: 2005-03-11 9:17:02, ID: 3011151
"GO"要去掉,同时看是什么错误信息啊!

来自: zdb123, 时间: 2005-03-11 9:18:06, ID: 3011153
单引号的问题,SQL中一个单引号,query里要两个

来自: shunbing, 时间: 2005-03-11 9:18:38, ID: 3011156
USE Clothing

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_ComputeMoney]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_ComputeMoney]

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_InKuCun]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_InKuCun]

脚本前几行,运行时总是提示第一行出错

来自: fengfan, 时间: 2005-03-11 9:19:24, ID: 3011159
不是单引号的问题!
能把出错信息给出吗?

来自: shunbing, 时间: 2005-03-11 9:24:08, ID: 3011165
执行:ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.LoadFromFile(ExtractFilePath(Application.ExeName)+'Clothing.sql');
ADOQuery2.ExecSQL; //这一步出现错误
的时候出现以下错误:
Project Setup_DB.exe raised exception class EOleException with message '第1行:'' '附近有语法错误。'Process stopped.Use Step or Run to continue

来自: fengfan, 时间: 2005-03-11 9:54:07, ID: 3011246
把注释去掉!.sql文件中的注释代码统统去掉再测试.

来自: fengfan, 时间: 2005-03-11 10:00:23, ID: 3011261
不对,应该不是这个问题!

来自: jfyes, 时间: 2005-03-11 10:03:25, ID: 3011271
用ADOCommand 是用_Recordset执行的,ADOQuery要求的“delphi”标准SQL语法所以你通不过


来自: jfyes, 时间: 2005-03-11 10:06:56, ID: 3011278
我以前有这样的问题,最后才发现 TADOQuery.ExecSQL: Integer;过程中有...在看TADOCommand.Execute

来自: shunbing, 时间: 2005-03-11 10:27:49, ID: 3011322
jfyes兄能不能讲清楚一点,你是过来人啦,呵呵,帮帮兄弟吧

来自: iorizht, 时间: 2005-03-11 10:55:34, ID: 3011385
生成SQL脚本的时候好象得选成windows文本,要不不行。
嘿嘿…………

来自: small pig, 时间: 2005-03-11 11:10:28, ID: 3011423


来自: dreamisx, 时间: 2005-03-11 11:11:09, ID: 3011427
你得将SQL脚本拆开执行,如创建存储过程、触发器等语句必须单独执行!
查询分析器里之所以可以执行,是因为它在内部拆开执行的.

来自: shunbing, 时间: 2005-03-11 11:17:28, ID: 3011445
请问dreamisx:存储过程难道要一个一个创建吗

来自: jfyes, 时间: 2005-03-11 11:25:50, ID: 3011464
你打开VCL源程序看看就知道了,这打中文很慢。

来自: maching, 时间: 2005-03-11 11:41:46, ID: 3011487
将(ExtractFilePath(Application.ExeName)+'Clothing.sql')里面的路径直接换成实际的路径(如:c:/Colthing.sql)看看行不行?

来自: shunbing, 时间: 2005-03-11 11:44:57, ID: 3011493
谢谢maching,现在已经可以创建表了,但问题是没法创建存储过程,不能在脚本里写,不知道该怎么写

来自: dreamisx, 时间: 2005-03-11 12:31:31, ID: 3011560
存储过程、触发器等东东只能一个一个地创建,而且必须是批处理语句的第一条,你查一下帮助就知道了;
至于查询分析器可以批量执行,只是因为它在内部作了处理。

来自: shunbing, 时间: 2005-03-11 13:17:41, ID: 3011598
有没有方便一点的方法啊,存储过程很多啊

来自: shunbing, 时间: 2005-03-16 15:57:47, ID: 3015944
多人接受答案了。

得分大富翁: dreamisx-26,fengfan-3,iorizht-3,jfyes-3,maching-3,Navy1976-3,small pig-3,zdb123-3,坚持信念-3,
 
和增加、删除、修改一样。SQL不同
 
with adoquery do
begin
close;
sql.clear;
sql.loadfromfile("Xx.Sql");
try
execsql;
except
open;
end;
end;
我用了这种方法。怎么不行呀!
 
多人接受答案了。
 
后退
顶部