在线等待:ADOQuery的SQL有长度限制吗?(急)(100分)

  • 主题发起人 主题发起人 sundart
  • 开始时间 开始时间
S

sundart

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:SQL SERVER2000
const
sSQL = 'Insert Into 客户关系表(名称,简写,从业性质,单位规模,信誉度,财务状况,'+
'发展潜力,电话,传真,地址,邮编,邮件地址,税号,开户行一,账号一,开户行二,账号二' +
'联络人,是否倒闭,备注,树图编码,速记码,类别)Values(:名称,:简写,:从业性质,:单位规模,' +
':信誉度,:财务状况,:发展潜力,:电话,:传真,:地址,:邮编,:邮件地址,:税号,:开户行一,' +
':账号一,:开户行二,:账号二,:联络人,:是否倒闭,:备注,:树图编码,:速记码,:类别)';
var
with AdoQuery do
try
if Active then
Close;
SQL.Text := sSQL;
//程序执行到此处时会弹出如下异常:
'Access violation at address 78011689 in module 'MSVCRT.DLL', Write of Address 01DB5000'
...
except
ShowMessage('Error');
end;
难道ADO的控件有长度限制吗?
以前我在BDE中使用时,比这长得多的SQL都用过, 没一点问题?
请大虾们支招!
谢谢!
 
我用AdoDataset控件,Sql中包括有1000个元素的数组都不会出问题。
你的Sql.Text这一语句有错吧,应改为如下:
sql.clear;
Sql.add(sSql);
 
应该不会有限制,不过最好不好用中文作列名
 
你的列是什么数据类型,如果是字符串,应该加上“'”
 
谢谢各位老大的捧场!
//你的Sql.Text这一语句有错吧,应改为如下:
//sql.clear;
//Sql.add(sSql);
其实效果是一样的。
//你的列是什么数据类型,如果是字符串,应该加上“'”
呵呵,如果使用参数,不需要加“‘”的:)
//应该不会有限制,不过最好不好用中文作列名
没错,主要因为设计表时,不愿写数据库结构文档,使用了中文列名
---------------------------------------------------------------------
如果我在设计环境下,就此SQL语句填入ADOQuery;
那么在运行时就没有错误,Why?
由于我的ADOQuery在几个地方要使用,所以SQL语句不能固定。
请问如果解决?
谢谢
 
Query之SQL是TStrings,其Text可达2G,你的SQL有这么长么?
要说限制,那是后台数据库的限制,后台数据库支持一次执行多长的sql就是多长
 
长度应该是足够长的,
限制只和后台的数据库有关,
数据库存取控件只负责传递语句和保存返回的记过集。
只要数据库能直接执行的语句,
用数据库控件也可以执行。
我上次将一个3000多行的sql语句用adoquery执行都没问题
 
const
sSQL =
以上有问题。
你可以把sSQL拆成几个长度小于255的字符串,加到TQuery的SQL中,应该就没有问题了。
哇哇
 
你用const定義常量,不能保證Delphi的編譯器把它作為甚麼類型
改為
var sSQL:string;
sSQL := '........................'
 
Const
sSQL
改为
var
sSQL
也许是我瞎说而已,我从来不会把sSQL定义为常量。
 
好像sSQL的第二行尾还缺一个逗号(,)
 
to sundart
adoquery的参数有bug,原因位置最好还是别用,你直接写成标准的sql实施!
 
我用ADO也遇到过相似问题,我是一段一段地
sql.add的,到某一行出现非法操作,后来我在非法操作前一行加上
sql.add(' and 1=1 ');
就没事了,真怪。。。
 
多人接受答案了。
 
后退
顶部