数学建模社区-数学中国
标题:
[求助] 关于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.
5 A# j2 z" g" v8 d6 o, v
+ C2 R; {9 e" P
while not adoqxiaoban.Eof
; a z& j! N1 S) a* `8 {( U4 [
do
- c2 j! ^2 x% t$ |. \+ T5 B
begin
$ I$ b0 K+ O4 t9 c: N6 d
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );
4 z/ D& l) y8 q9 j) h
strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;
" c1 J% I4 a* v- F
strcode:=strlinban+strxiaoban;
Q; @* s9 A: _2 c5 \
adoqs.SQL.Clear ;
! x1 X- L. e0 M1 Q
adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
4 g9 N \0 q- q+ A& C. W
adoqs.Prepared ;
! O: g F& r# W! M7 o, C
try
2 T: Q$ _( p9 z# F, a3 u
adoqs.Open ;
7 R+ o* R8 ?7 n
adoqxiaoban.Next ;
* h3 y# Y$ C: E" c9 q, M
except
- y- x S" y( A1 h: d
showmessage(''出错!'');
# F2 u6 \8 P( A
exit;
9 u( R1 f8 S, j8 O/ Z: }, T" g
end;
' h" v( O) o9 b" P7 `# W0 g
end;
# A( P" t5 t7 y+ i
adoqlinban.Next ;
8 j( q, W- F' M& D
* a4 q& {5 D6 Y4 h* G: [
这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者:
ilikenba
时间:
2005-5-6 10:35
<
>我估计是这句的问题adoqs.Open ;
6 u2 q! x% m% b& p1 f/ ~
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者:
penguin
时间:
2005-5-6 13:11
<
>好的 我给你全部的代码吧</P><
>unit Unit1;</P><
>interface</P><
>uses
& B( G8 I" x7 F3 R9 W2 M1 M% K+ d
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- C2 ?+ @6 p/ |; X; X2 @! y* x
Dialogs, StdCtrls, DB, ADODB;</P><
>type
5 W+ D; x# g) p1 O
TForm1 = class(TForm)
- q( M A1 V9 {, T, u- H% U
Edit1: TEdit;
/ s) w3 g1 t0 C& d& R. ?1 a4 q
Button1: TButton;
% B9 s. N: u+ d, P0 O% S0 d
ADOConnection1: TADOConnection;
8 v/ z0 e2 d% r) D
ADOQlinchang: TADOQuery;
4 @8 X+ f, z2 g; d1 @- ~' a
ADOQyinglinqu: TADOQuery;
3 t: _# B+ Q) g
ADOQzuoyequ: TADOQuery;
/ A; N2 R ~3 j. z2 @6 f9 I) ~
ADOQlinban: TADOQuery;
- ^1 U" t$ z( W4 i; ]
ADOQxiaoban: TADOQuery;
1 @* k; {& b, d& F
ADOQs: TADOQuery;
: {/ [& N% i8 _1 u
procedure Button1Click(Sender: TObject);
6 q7 }. N. m' r" y
private
1 _& U0 \" A- Q" \6 D
{ Private declarations }
( L# b9 U2 w: O, \! `, h0 L2 H
public
( X8 P" J4 T. b( I7 ]4 I, s
{ Public declarations }
: i2 H0 P! q, {3 D; ?4 d; G
end;</P><
>var
7 \0 m( Z# X: P* A# I
Form1: TForm1;</P><
>implementation</P><
>{$R *.dfm}</P><
>procedure TForm1.Button1Click(Sender: TObject);
9 e/ Y/ e2 _5 q3 ?
var
5 c6 e6 u7 w: ?, w- [. L. R
strlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;
! t% A+ F0 I$ q3 G( U
begin
9 A, l8 E, P1 T( w, v1 q
adoqlinchang.Close ;
* E( X& _. T" \4 L
adoqyinglinqu.Close ;
8 K3 h# H* M5 ^, V1 B/ p' p2 m$ ]
adoqzuoyequ.Close ;
* t* ]1 S) V8 n; X) s2 {" O0 Y% `5 S
adoqlinban.Close ;
8 w2 m0 [# I9 \$ v
adoqxiaoban.Close ;
* k, Q# O: O! m* v7 t4 O
adoqs.Close ;
5 L0 N. q! F) h M
adoqlinchang.SQL.Clear ;
6 e4 R; [6 l1 I8 C3 x1 H3 y) D
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');
6 [* Q( B. c( J' B T, l( i" S) ~
adoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;
* r; \* Q+ C7 s+ P: S2 o6 ~
adoqlinchang.Prepared ;
$ Y! e/ P( j1 [$ R% q6 V5 m. c
adoqlinchang.Open ;
, v, T: c& g/ N
strlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
3 s9 T f3 ~* J- O( B' V
adoqyinglinqu.SQL.Clear ;
0 |6 A; F y \. R2 `
adoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
* m% k( u; p# j- F' B p' i
adoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
3 n* Y! k' M$ M! H9 M" ~% O+ U0 Q
adoqyinglinqu.Prepared ;
6 F: l0 Z, v) |# A, m9 v! ^8 T
adoqyinglinqu.Open ;
& o( W2 B& P* a. h2 C
while not adoqyinglinqu.Eof
0 M5 a( N" a3 H) ~6 {
do
- y! G6 a# a9 G j0 E& v
begin
6 N9 l6 T0 o; @* W: s
stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
: C3 R* ~6 S$ ]. `, R
strcodeying:=strlinchang+'999'+stryinglinqu;
' V' j& H8 I+ v- {; J
ADOQZuoYeQu.SQL.Clear;
/ V3 k7 }6 H O" M% E1 E3 w4 B9 ]# t
ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
2 d5 Y1 Z, U' ~; A/ U
ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;
. N, h3 x* R% b
ADOQZuoYeQu.Prepared;
# V" L$ u, M& A4 E& h- b3 O
ADOQZuoYeQu.Open ;
5 `" u, S3 y2 m' q. B$ X
while not adoqzuoyequ.Eof
V( W# Y+ ~+ Y* _6 X
do
! t9 D& j0 H: \* U" E: _/ M: n
begin
3 R1 W( J U; v. K* G# ?' F' [
strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ; <a>file://逐</A>个作业区的代码
% t7 K6 O# I: V5 ~) o
strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;
1 M% k; H; Q9 B& u5 X
ADOQLinBan.SQL.Clear;
8 i5 c% A3 z" H" T: V L
ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');
. X; Q; @( i8 r/ \/ P8 G0 _, T9 L, {
ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;
; i3 z# R* a4 g7 ~0 T" p
ADOQLinBan.Prepared;
& k! b0 _* O) h5 k; L8 W8 l
ADOQlinBan.Open;
7 ~5 X2 m9 f' F8 N7 J: t( T0 b3 x
while not adoqlinban.Eof
7 r, l1 i' w2 W" I
do
) X3 K2 s' m: `* e
begin
5 ]" U: }& v$ |
strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
( l. L- d8 d. |( y# l6 \5 ^
strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
/ K. [2 M0 {6 ?+ x
adoqxiaoban.SQL.Clear ;
8 g1 r. H) [- ~; c+ j$ m1 m
adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');
$ J3 e% ]$ j/ j. B2 E M. t$ l% D, O z
adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;
4 }0 z/ `5 N5 R; |9 I9 b& G; w
adoqxiaoban.Prepared ;
* l& c2 z, g3 O8 ~2 v
adoqxiaoban.Open ;
! c/ c; K- J9 H3 E: m6 K* o
while not adoqxiaoban.Eof
+ ~6 \7 u, x: A0 @: s2 O3 }, O
do
' I5 _8 J. x6 z
begin
$ b$ b7 A5 x7 m% `# i
strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
$ l q; t$ [& M
strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
/ [& j3 `/ Q) F
strcode:=strlinban+strxiaoban;
: I2 @& t5 @! Y( x
adoqs.SQL.Clear ;
3 d! x5 x" z& c6 B4 O
adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
) ~5 X; _& ~% {6 w/ T4 g
adoqs.Prepared ;
. o, c# A- L2 V
try
0 |' q+ D4 m/ s
adoqs.Open ;
: [9 Z" y2 |7 Z( d! e1 L
adoqxiaoban.Next ;
7 q7 Q7 `- _( g0 e8 Z
except
% ^' [: ~5 G; \3 t( m" @
showmessage('出错!');
6 t4 S, H+ x0 v. S: `% E
exit;
8 {: }$ S0 k) e# {" ^8 ~& n1 _
end;
% V# h% a9 `" @$ s
end;
* V4 \, m: I6 L3 \6 {! @
adoqlinban.Next ;
) j W) ]! Z! l/ F9 W
end;
+ i [2 B( R* c& u+ h
adoqzuoyequ.Next;
; q$ o: r9 d" F/ b
end;
. ^7 u: `7 r5 ?& m' s0 n
adoqyinglinqu.Next ;
9 n9 o+ i' Z3 S5 z: U0 S
end;
, P, ^6 ?' D& F' w
adoqlinchang.Close ;
/ J! m) V6 J/ Z' \
adoqyinglinqu.Close ;
. p3 W0 B; b( [4 g
adoqzuoyequ.Close ;
, c, @ v" ^# ~6 j9 N d' |
adoqlinban.Close ;
) j; B# [& _/ A- d' ?$ V
adoqxiaoban.Close ;
+ ~' @( K7 C4 c2 C
adoqs.Close ;
6 L' b* T+ ?! g! @4 p+ d; N) R" @! P
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);
3 @. w. i2 d7 g* y" P
var
]/ e! f+ A% g- q6 Q
str1,str2:string;
8 R/ r0 T5 N, a9 e( t& x: v
begin
& o. w( b1 w9 t" y# m& D
str1:='001';
0 `4 P8 w9 B/ ~* Y
str2:='002';
) d' o5 c, ]1 R7 G, d: @- n0 P- _' U' _
adoquery1.Close ;
! J' K9 Z3 _1 Q$ F4 U5 a* I7 X
adoquery1.SQL.Clear ;
. Q* L7 |3 z4 C, z
adoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
' f! h, i- R: W/ T* d0 x, e
adoquery1.Prepared ;
3 n+ m) g7 b/ \" `2 n! G+ e' o- T
adoquery1.ExecSQL ;
7 r4 P- V6 l4 S1 R) j) B: v
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