数学建模社区-数学中国

标题: [求助] 关于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.$ T/ h! {4 n, b, v3 Q& W' {2 f
     
$ N; H/ Q  e" |' P8 K5 c2 q     while not adoqxiaoban.Eof6 }6 h6 p9 c: m! v0 h
     do
& @8 U: M# C+ ^! v5 _% d     begin
$ N9 J& ]% S" f1 h     strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );
+ S# V% G! I5 A. r     strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;4 l4 [* E6 |6 ?& }
     strcode:=strlinban+strxiaoban;9 Q) k- ^- ]- M# z& x! ]: @
     adoqs.SQL.Clear ;+ f# V5 ?  `# ?- K( Y
     adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
1 {5 r& z/ e( j  X' f     adoqs.Prepared ;/ g3 n) P5 b( U! L
     try% e& S. A6 s* C7 k
     adoqs.Open ;4 v$ y2 H( W- t3 d7 |
     adoqxiaoban.Next ;
0 `/ S# [3 Z! Y$ \     except
4 J3 ^$ {2 E8 u     showmessage(''出错!'');2 o9 \" j5 a7 T: a
     exit;+ c9 v7 P, H0 |. f* [0 X
     end;
7 F. E- u$ @, e9 G; C7 d     end;
1 g* g) _* y( {" H& h0 Z* E     adoqlinban.Next ;
/ [3 ?7 t2 m: e" o+ h( y     
9 n* L, {6 m0 ]     这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者: ilikenba    时间: 2005-5-6 10:35
<>我估计是这句的问题adoqs.Open ;& d' [5 |7 D: z! X9 E$ O
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者: penguin    时间: 2005-5-6 13:11
<>好的 我给你全部的代码吧</P><>unit Unit1;</P><>interface</P><>uses
9 Q1 E* p" S$ E3 `9 F% S/ m  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,6 Q: S7 j) V9 |1 K
  Dialogs, StdCtrls, DB, ADODB;</P><>type: M$ e7 |6 z8 m+ c% F  v, F% L
  TForm1 = class(TForm)& \6 J4 s1 B* l. o
    Edit1: TEdit;( p4 u% a6 G* K1 |" d  B
    Button1: TButton;
0 Z4 O1 R: _# R. P. ~    ADOConnection1: TADOConnection;" {0 Q5 H" B0 R
    ADOQlinchang: TADOQuery;
% D- m' K+ i; E: D) N    ADOQyinglinqu: TADOQuery;
' }: h. H: ?1 E3 F+ m    ADOQzuoyequ: TADOQuery;
/ A7 b, s0 i& \, o) q/ \: j' a    ADOQlinban: TADOQuery;- `2 W; f: i" ^1 Y; p0 o% v
    ADOQxiaoban: TADOQuery;
# Z8 }5 {3 I2 \3 s2 V    ADOQs: TADOQuery;* x! y: o2 y5 |; b3 ~' X% J7 z
    procedure Button1Click(Sender: TObject);7 T, ~: k6 i, o9 `0 ^' [0 I
  private
+ c/ n! N- O* K) `5 T8 H( v    { Private declarations }
0 `& h/ t( k4 R. C, t  public
7 l; L. T7 w# b! P- l2 {    { Public declarations }0 ]8 Z( L& B, J) G* I" t: h+ t
  end;</P><>var
% E1 d' O7 W9 F% {/ l# A  ^  Form1: TForm1;</P><>implementation</P><>{$R *.dfm}</P><>procedure TForm1.Button1Click(Sender: TObject);
' P% O; J5 Q2 ]0 E; y0 ?/ lvar. j0 s) D$ M' w! p" \+ ?
strlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;4 A% O+ d( i6 ]5 _8 J
begin
2 R7 }$ T: P0 q7 G$ madoqlinchang.Close ;7 U2 M( i7 `& c3 m9 M6 M9 b6 \
adoqyinglinqu.Close ;
: \; P; P' d( ^- b2 padoqzuoyequ.Close ;4 ?& l9 d6 c# V9 v. [! ]
adoqlinban.Close ;5 ?5 y3 R( I  N+ y: [
adoqxiaoban.Close ;: a4 D) w) Y6 ]" c3 Q8 K
adoqs.Close ;/ i5 ^! ^; s/ d& C
adoqlinchang.SQL.Clear ;/ ^$ ~4 r& h9 I: ^" |- Q+ h
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');
* H/ H" g8 O" x8 k4 badoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;
7 f- N* q# D3 {8 O% F7 Gadoqlinchang.Prepared ;6 c' o- T3 Y4 M4 k: e
adoqlinchang.Open ;
$ b4 y  u) f+ x& Z& D2 istrlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );1 y  P9 \6 f' O6 g4 B
adoqyinglinqu.SQL.Clear ;
* x1 a2 I" u7 `* L. c6 r2 Tadoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
) F& ]1 n+ `* s5 iadoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;0 }" i! `' m$ h
adoqyinglinqu.Prepared ;
+ a5 Y7 a$ _% }' _8 V: vadoqyinglinqu.Open ;: f* i" I( ?/ u
while not adoqyinglinqu.Eof4 _8 K" a, G! h* G1 j4 X
do1 q8 I. ?/ q$ ]0 @
begin
, ?# X$ d5 X& T+ ]1 [9 N. s( V  stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
; V1 l% A6 I/ q  strcodeying:=strlinchang+'999'+stryinglinqu;
; Z. s$ F7 S5 C  ADOQZuoYeQu.SQL.Clear;" M6 N8 }) M2 y& |  e' ]
  ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
& L+ d7 b9 E- I$ Y6 H: u  ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;  |9 x0 [. Y* `/ g
  ADOQZuoYeQu.Prepared;; J# G- K) J) {& i2 r* G) k7 }
  ADOQZuoYeQu.Open ;# z) W" H$ p2 Q" r9 P
  while not adoqzuoyequ.Eof3 t/ J# n2 ?4 T8 L  A& r. r2 y4 d
  do  H' `" w. c( x2 V( Y
  begin( D- f+ o% V1 n! m( c/ Q
    strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ;       <a>file://逐</A>个作业区的代码
5 f3 z  ^- k4 K+ g    strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;4 k4 \5 r& u7 O& [: _. I
    ADOQLinBan.SQL.Clear;3 b; u: B* r6 O2 A) m
    ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');9 M2 U8 r. Y2 e$ v' L4 @7 i7 }
    ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;. P  R" C4 J6 w; T- q8 |+ h
    ADOQLinBan.Prepared;
5 ]* O# g9 s& t+ p/ f& q  ]7 X    ADOQlinBan.Open;
  G* D2 h6 ]  Q# F% N6 s    while not adoqlinban.Eof
1 [( U9 `& z/ m8 F  _    do  |! q- M5 j% E; f4 h; F* g% m
    begin
) e1 H& z9 V. P, V% W3 {+ h7 e; ^      strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
+ }  i4 `  y# z& u7 [; ~2 {4 c      strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;6 |& D: ]9 s$ w* g: G7 B/ d
      adoqxiaoban.SQL.Clear ;
1 o  Q4 G3 a  e. u3 b      adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');% U6 R7 T/ O) s! x
      adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;. D& X- b# Z2 X% Y/ u. ^
      adoqxiaoban.Prepared ;
2 X6 ^+ P) f  I1 m+ E      adoqxiaoban.Open ;% W9 {3 U% \/ F& g/ O
        while not adoqxiaoban.Eof/ L% E8 _2 _, o2 ~( }7 ~& z
        do  S; r: g1 A8 G
        begin
' v- F1 O: y: s$ ^. j: W          strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
( ~1 u" _/ l* `, ]- i          strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
  Y% U, }3 K* L# ^, l9 l# r          strcode:=strlinban+strxiaoban;
' K& m4 j6 g* d) k! F1 V9 I          adoqs.SQL.Clear ;
+ \8 Y' N7 A  A& M6 S( ^          adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
& N: J% X" x/ ?4 z5 O7 G          adoqs.Prepared ;1 X' d1 p3 Q! O: G$ v# t' c8 ^
          try
7 w9 {0 Y, J2 z9 k. n, ?/ q          adoqs.Open ;  w1 u- Z: [3 a7 q8 f" L) |' b+ X
          adoqxiaoban.Next ;8 A+ Q! o  T- q, D: V2 t' P; K2 s5 v+ u
          except  W: @; D& d# v% M5 w: N
          showmessage('出错!');) h5 ?3 e5 H" s0 {
          exit;+ k3 v  A' o; t2 y9 l% R' T
          end;& x0 u2 I' M$ X1 Y# n  h( H
        end;4 W* U% _; N9 l% q% K
        adoqlinban.Next ;
) @; }; S6 g. S' ]. C8 C2 b7 P    end;) K" F, K$ m/ J8 m5 b' ^3 r
    adoqzuoyequ.Next;
5 p, y, D; F2 h$ h/ Z  end;
- x4 H0 m4 R) `3 n' G    adoqyinglinqu.Next ;4 ^9 @( k! C# R
end;. [7 o8 q( z9 }% w, ~8 B/ Z$ S, Q
  adoqlinchang.Close ;
) ~( P% Z, Y  o3 H) x9 x. C5 e  adoqyinglinqu.Close ;& m' D$ n# {* f+ n, F' e. D
  adoqzuoyequ.Close ;' u6 o3 M8 Z# r# `4 ~' \, B' h" p
  adoqlinban.Close ;( @" ~! ^& r. a3 F4 v# Z/ @6 q
  adoqxiaoban.Close ;# L$ g, N$ j. a6 q1 K! N* G
  adoqs.Close ;
" d7 D5 i8 L- H, |! y, y' A+ eend;</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);
+ `7 Z; C3 L, X: O$ vvar- x( C% Q* y8 [# M5 W& u: ~
  str1,str2:string;
5 N6 I  Z# a: y. w! L; [begin
0 \! N' I$ T' D# z; kstr1:='001';+ @: Y. [- w5 `3 }6 V+ l0 S
str2:='002';
4 j; w7 B: t/ ^5 @+ W$ O9 @) Aadoquery1.Close ;1 g6 o/ Q% @! f6 E* \
adoquery1.SQL.Clear ;
# P# Q9 b3 `: a- Iadoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
" x- K1 d1 N  \1 ]adoquery1.Prepared ;
: N2 p$ y0 K4 {8 V( }adoquery1.ExecSQL ;) n5 x  O* c  g
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