数学建模社区-数学中国
标题:
[求助] 关于delphi访问数据库发生了错误 !!!急!!!急!!!急!!!
[打印本页]
作者:
penguin
时间:
2005-5-6 10:09
标题:
[求助] 关于delphi访问数据库发生了错误 !!!急!!!急!!!急!!!
project project2.exe raised exception class eoleexception with message ''在此上下文中不允许使用''c1999001999001999001999001''。此处只允许使用常量、表达式或变量。不允许使用列名。''.process stopped.use step or run to continue.
. E+ U+ E) ?- _0 v x; o
# o* ^9 Q3 }, b
while not adoqxiaoban.Eof
4 V( K: x. A+ K3 b5 [' |, g0 X! p
do
/ `" K; V6 k' h8 ~) J. A% D
begin
7 q) D3 _4 B% r
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );
+ _& y; Z1 {. @$ W, t/ h# }
strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;
9 ^0 I" t" Q6 f, O/ H K5 r# O
strcode:=strlinban+strxiaoban;
' W2 U5 }* X9 e1 x0 H; ~6 G( x2 ^
adoqs.SQL.Clear ;
1 i$ X6 X: j+ u8 m& Y* @% M- d
adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
9 j/ x, Z' c& _" l2 W& G3 {
adoqs.Prepared ;
/ h0 z% b* A5 ]& B3 C
try
4 ?. ^3 `+ V: w: M4 }& ?* \5 h4 e
adoqs.Open ;
9 U( D( P# M7 b5 |3 t, y2 f
adoqxiaoban.Next ;
& b+ ^$ R t% L9 B Z
except
6 Y5 R/ E& k+ g
showmessage(''出错!'');
3 T5 a$ n/ \8 p. }& L
exit;
, B# O8 @2 C/ @9 j/ e7 }
end;
9 L. A0 H$ `% b+ x: A: e: h) C1 X. g
end;
* ]$ H) V8 [) L; t5 t2 G
adoqlinban.Next ;
) ]4 R" O: }& p& N& Y
" w; C% z3 u( W2 N
这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者:
ilikenba
时间:
2005-5-6 10:35
<
>我估计是这句的问题adoqs.Open ;
* t3 M, m+ b( g" d! s# J+ l
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者:
penguin
时间:
2005-5-6 13:11
<
>好的 我给你全部的代码吧</P><
>unit Unit1;</P><
>interface</P><
>uses
& v* t1 z3 |0 b1 p$ A
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
2 A' g: K" i$ V
Dialogs, StdCtrls, DB, ADODB;</P><
>type
. f" }, m7 ~3 T4 Q+ g8 {+ v7 a K
TForm1 = class(TForm)
, v/ E d5 _& Z# n8 M( h
Edit1: TEdit;
- E5 H. j+ F1 K, }- @8 l. @
Button1: TButton;
- A+ r5 x' I1 j3 p* Y/ U
ADOConnection1: TADOConnection;
+ T0 \' B; Z2 v: {9 |' X
ADOQlinchang: TADOQuery;
4 X, ]1 W9 G& A
ADOQyinglinqu: TADOQuery;
& w$ }+ d4 G$ c0 m3 e( m+ l
ADOQzuoyequ: TADOQuery;
1 o& ~" o$ e7 E
ADOQlinban: TADOQuery;
+ i5 R; Z7 c: F
ADOQxiaoban: TADOQuery;
4 R/ V+ L$ `( N' q' R+ e2 R
ADOQs: TADOQuery;
G" K2 w9 V) t& h: ?5 a- D4 q
procedure Button1Click(Sender: TObject);
3 i2 P8 A" `) S. a- h
private
$ d2 b5 W' ?; W @3 H: I
{ Private declarations }
. a6 R8 E% h7 q# n$ H! ^3 B% E# e* Q: {
public
3 ?5 p+ ~6 L" z2 g7 _
{ Public declarations }
@* W5 N- o0 n5 \) s1 Q
end;</P><
>var
6 n2 R! k0 T8 G3 ^0 q& c# }5 D
Form1: TForm1;</P><
>implementation</P><
>{$R *.dfm}</P><
>procedure TForm1.Button1Click(Sender: TObject);
( K0 Z* p, i5 ?
var
+ i/ B& ]- I# s6 r# Q
strlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;
& Z" z$ O9 f2 p. o! K
begin
* F! T1 J) t0 S) K
adoqlinchang.Close ;
, ~: ~8 Y. ~- K; |0 @
adoqyinglinqu.Close ;
& v4 f- h7 u4 h
adoqzuoyequ.Close ;
$ G- ], a- \+ l6 S4 @0 H+ v
adoqlinban.Close ;
- _7 C; j' e) t0 B& |/ i8 ^( S
adoqxiaoban.Close ;
! A' @) G6 W+ a* ~" v
adoqs.Close ;
$ }4 k8 B$ ?( M9 w$ Z( q
adoqlinchang.SQL.Clear ;
' U: F, y0 v9 d* [4 @: c; ?
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');
, Y) J! Y8 \0 S. ^8 B
adoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;
8 Z# p% v f5 |7 d& A5 n9 M4 v5 j
adoqlinchang.Prepared ;
- a- l: D: L. G8 u' w2 O6 p7 }
adoqlinchang.Open ;
0 |; c; l2 c/ q! u
strlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
& z; L! q; R) [! ]/ s! }5 g
adoqyinglinqu.SQL.Clear ;
/ C4 K* L1 X& a! V l/ j
adoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
( @$ s$ J2 p/ V( s0 J( C3 d K+ e
adoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
b6 L6 @% l& g3 k2 s$ o. s1 M7 \( w
adoqyinglinqu.Prepared ;
( g) L, u( _$ s
adoqyinglinqu.Open ;
! \' G. H1 l! o- P
while not adoqyinglinqu.Eof
8 R# H h# Y# C& t% j# r8 C% R* n' x
do
, N! s' }! c% ~0 w3 v/ T w9 [
begin
/ W5 Y. G4 m/ f: ^& Q/ D- |
stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
7 F/ R' w0 z h+ b! ?2 }) a
strcodeying:=strlinchang+'999'+stryinglinqu;
. F4 ]; W/ W% @
ADOQZuoYeQu.SQL.Clear;
; _) y# u. R5 N" i# v9 m1 _
ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
2 E# N: I* `: Z. z4 w
ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;
b( F' q, e3 a0 B
ADOQZuoYeQu.Prepared;
5 ?5 C: U3 j0 d
ADOQZuoYeQu.Open ;
( u8 r, S' ]. _$ U
while not adoqzuoyequ.Eof
% ^. K! V5 S* } ?
do
! M0 F4 A7 [. l9 b/ f
begin
$ a! F. ^4 Y! |$ ]9 T
strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ; <a>file://逐</A>个作业区的代码
5 A3 |( H' f0 O" V( _
strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;
/ Z. e& R4 b% T
ADOQLinBan.SQL.Clear;
* U% X% y3 H( @
ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');
( d# ^/ R6 b* q9 @" u
ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;
3 e- l' t; r7 R# P
ADOQLinBan.Prepared;
7 N) h+ ^) @' @* x9 c; d3 G
ADOQlinBan.Open;
1 }( z- w& W. ~9 g. S% I ]
while not adoqlinban.Eof
8 j, d7 G% h: u6 R# u
do
$ p \ |% B6 |1 l' C+ Z+ D7 A
begin
, R! s2 e* b. S
strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
/ B( s2 [- p! Y7 Y" k. M
strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
8 ]7 k8 m) Z! I0 T
adoqxiaoban.SQL.Clear ;
7 w6 Y3 G# T. u- E: u+ ]6 n( o0 ?
adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');
# j) [& b- o9 I7 x" S
adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;
; d8 e/ v# _0 o/ r! S% r- g/ x
adoqxiaoban.Prepared ;
0 [6 A _$ C# t1 H/ B
adoqxiaoban.Open ;
: V# r6 D( c- j( D9 y
while not adoqxiaoban.Eof
- `! Y' m1 ^- H# y$ X7 q; \& o
do
( U7 t1 L& V% B; W) y" o
begin
; u9 N# E% I+ [! {& ]9 N9 f K
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
9 E4 E' `' v$ F9 ~6 M6 Z4 `6 l- F
strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
, o% P! ^6 y3 b5 ]& t+ w
strcode:=strlinban+strxiaoban;
+ G' _, h! W3 r7 r% G
adoqs.SQL.Clear ;
& }7 e8 Q# T2 O$ r( Y- ^/ [' D
adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
' R6 o5 m3 W! F# P
adoqs.Prepared ;
, A8 i) V: \, @# }0 L
try
- x3 Z6 k& D; R. _# {
adoqs.Open ;
; j) i; U0 _* J+ Q: V l7 M
adoqxiaoban.Next ;
, ]8 W; A$ s \+ q* T7 n( V1 ?
except
3 N) q' @, `, y2 s
showmessage('出错!');
6 |4 u. h' ~" y3 {2 p! |
exit;
" T+ e0 `+ i7 E4 |4 K1 g2 Q0 M
end;
1 `7 R7 r! z% W: R9 b
end;
; v, V+ f2 b3 o4 s3 L% f
adoqlinban.Next ;
' p3 @, Y6 I: p" j5 w% ]$ g6 t" p
end;
. |' T# f: h* D/ s/ L1 E
adoqzuoyequ.Next;
" J& _0 S. S. g" d! W
end;
1 x0 F" l& b; Z
adoqyinglinqu.Next ;
0 Y3 G( A: N, @# I o* }
end;
! [+ K1 |5 f/ e+ b/ _. B+ X
adoqlinchang.Close ;
. y4 J9 _1 m3 J8 i1 }
adoqyinglinqu.Close ;
/ L! ]1 I$ T# F2 B% _3 e
adoqzuoyequ.Close ;
; K0 `7 u4 E4 ^5 ~6 E
adoqlinban.Close ;
( Y0 e7 C0 y# w4 f) S" E. q
adoqxiaoban.Close ;
1 A( h$ O7 G/ S$ P4 T( |
adoqs.Close ;
0 I% ?8 q2 W1 c) `
end;</P><
>end.</P>
作者:
penguin
时间:
2005-5-6 13:15
拜托拜托了
作者:
ilikenba
时间:
2005-5-6 16:00
你的程序我读起来不太明白,没有数据库我也调试不了,但是从错误看应该是SQL语句的问题,你应该跟踪一下,看看每个生成的SQL语句是不是正确!
作者:
penguin
时间:
2005-5-6 21:32
怎么跟踪亚 因为我的delphi没学多久 [em04] 我开始也以为是sql语句错 但试了下好像没什么问题
作者:
penguin
时间:
2005-5-6 21:53
<
>而且 每次用delphi向sql server里插入字符串时 如 001 到了数据库里面都是 1 </P><
>数据库里的数据类型是char型的 </P>
作者:
ilikenba
时间:
2005-5-7 01:52
你确认存入数据库的语句没有问题吗?001变成了1应该当作整型处理的原因,我一般喜欢用varchar的类型!
作者:
penguin
时间:
2005-5-7 11:27
<
>那是个实现从数据库中提取各级单位的编码 然后再编成最底一级的单位的编码 以表示它们间的上下级的关系 很简单的 </P><
>这个很急 搞了一个5.1 都没弄出来 下面的工作都没法做了 拜托拜托了</P><
>至于 001 变为 1的 程序在下面</P><
>procedure TForm1.Button1Click(Sender: TObject);
* }1 w% I. m! t; k3 C0 _
var
$ x1 W/ Y) n7 w% W
str1,str2:string;
) k7 d. z! L7 M D/ M$ |
begin
! J+ c5 T5 [9 o5 i
str1:='001';
( x0 u0 D8 _1 b7 a& X4 W! g
str2:='002';
, j0 f4 W5 i) h8 h, @; r
adoquery1.Close ;
3 q& V: U* s8 ?/ K- i( n
adoquery1.SQL.Clear ;
$ o6 _# ~5 |) k' P, l1 t
adoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
/ R0 `# _0 g+ p# e& `
adoquery1.Prepared ;
& i& i9 s. Z0 d/ ~' S& o
adoquery1.ExecSQL ;
" [7 X$ Q6 D6 {0 @
end;</P><
>我觉得我的程序没有错呀 </P><
>还有 varchar 和 char 有什么区别亚</P><
>万分感谢!!! </P>[em07][em01][em01][em01]
作者:
ilikenba
时间:
2005-5-7 18:08
<
>晕,你的SQL语句写的不对!字符串数据添加是两边要有',否则就按数字处理了!</P><
>adoquery1.SQL.Add('insert into test1 values('''+str1+''','''+str2+''')');</P><
>这句改成上面的就对了!</P>
作者:
ilikenba
时间:
2005-5-7 18:10
varchar和char的区别不大,就是varchar的默认大小是50个字符,而char是10.
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5