数学建模社区-数学中国

标题: [求助] 关于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./ r$ l2 |* ^5 Y4 c; _
     
( @7 {# s8 C8 j/ P$ u( l( {     while not adoqxiaoban.Eof
0 t7 ]+ G0 F) s& S     do
7 A' \) `, A3 U2 K     begin: u" v) _# D$ k; k2 b# ^
     strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );
' Q: O) y/ {2 W0 r, ^# B4 c     strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;
( s4 J" C( T4 i     strcode:=strlinban+strxiaoban;. @$ r, g6 x' \. m
     adoqs.SQL.Clear ;
* A, L( U% S. n, ^/ Z* G     adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
) Q' l" J) O8 J1 k6 K     adoqs.Prepared ;
- e4 ?) P2 F, B; [3 R9 w     try
& C" Q% r5 Z) Q# `6 d, E1 y) E7 j     adoqs.Open ;
5 }- o# W3 Z: `8 l: F     adoqxiaoban.Next ;, ?+ V- A- B; o( ?2 {/ i/ U1 d
     except
7 i$ q& E0 g: K( J8 B) d$ K     showmessage(''出错!'');: H5 ?/ J$ S2 D9 n* w
     exit;
6 h: P; d. N# c8 G& i1 y6 a; m     end;9 ]( i; d3 ]" u; G
     end;& y9 T, [) h6 b% m0 a0 D6 g# M
     adoqlinban.Next ;
$ r. s3 p0 G  W4 z, m0 r     
  w1 o3 x/ l- a' t* e     这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者: ilikenba    时间: 2005-5-6 10:35
<>我估计是这句的问题adoqs.Open ;! l- ?3 G! M  f- |
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者: penguin    时间: 2005-5-6 13:11
<>好的 我给你全部的代码吧</P><>unit Unit1;</P><>interface</P><>uses
4 N# j6 k$ g/ u- i  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
1 p/ v; C- |+ e1 ?9 C7 D  Dialogs, StdCtrls, DB, ADODB;</P><>type2 Z9 Q, {& O# b7 J
  TForm1 = class(TForm): i0 k! E/ k$ a! w) z
    Edit1: TEdit;4 x6 R( l" g9 ~- i
    Button1: TButton;
4 X3 C7 j) i6 f: \+ B    ADOConnection1: TADOConnection;' _5 p3 n3 T# k7 m+ ^  T6 h7 z/ z
    ADOQlinchang: TADOQuery;8 k8 Q) Y7 x+ {8 M
    ADOQyinglinqu: TADOQuery;* p" K" ]+ }1 g; ?& \. x
    ADOQzuoyequ: TADOQuery;5 x' K7 q& N5 J
    ADOQlinban: TADOQuery;
; b# q3 M- [, [8 A& M) S) k3 c    ADOQxiaoban: TADOQuery;
4 \, ^4 w( }1 i* x$ i    ADOQs: TADOQuery;/ r! q) d9 A/ w4 k% M: F6 w
    procedure Button1Click(Sender: TObject);# K3 ~5 q" E% k& a: n& }
  private8 g% l. F* K! @. a
    { Private declarations }  E2 R0 k0 L: D9 q+ d0 z
  public$ S1 }, U7 U( U. d9 r( \/ d# f5 k
    { Public declarations }
7 S  u& h9 ~4 M8 ^* Q' h  end;</P><>var9 f, \% j$ z* R
  Form1: TForm1;</P><>implementation</P><>{$R *.dfm}</P><>procedure TForm1.Button1Click(Sender: TObject);: N) ?( P" G1 m( C5 B* J
var
9 h/ v1 A3 m: q( istrlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;7 A3 @& V& ]( |( p4 ^8 s
begin! l+ p# U8 J7 D3 X2 O8 a
adoqlinchang.Close ;" g' ]$ D8 ^; |( H% U
adoqyinglinqu.Close ;
' k& B* A" S' [& ~- Y0 {adoqzuoyequ.Close ;4 `" ~  a# t/ n4 S. J) X7 d& ~
adoqlinban.Close ;
+ ~% q  b8 i& v: Radoqxiaoban.Close ;
6 m- ~/ s) Q. _" C& `adoqs.Close ;  Z8 O2 n) K8 [; }4 M
adoqlinchang.SQL.Clear ;! B* d0 ]  i- y: }6 H. e
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');
. |/ c4 A  \; V  Jadoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;9 w. D7 S! U/ E3 T
adoqlinchang.Prepared ;9 ]) \+ [6 V$ r2 a' E( Z0 ]
adoqlinchang.Open ;) u! q8 i" B, @4 Q2 g
strlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
3 @( B  g7 o8 x6 E+ V+ q$ ladoqyinglinqu.SQL.Clear ;
+ [: R7 J5 X: N) k3 v! F/ yadoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
) j' B, ]+ ?, S# `7 Gadoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
8 w& {3 G' C1 `, V5 S& B% q6 Madoqyinglinqu.Prepared ;
7 X# a% r4 `, J3 M: iadoqyinglinqu.Open ;
8 D, |% ?3 k0 Q4 B! C5 Hwhile not adoqyinglinqu.Eof
, j* x% |9 P" q' E% x+ |6 Q7 F4 qdo! M) }0 f7 f- R; _3 q
begin; u2 f& h1 X' V% D; v
  stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );% N# M" y" j1 R4 Y
  strcodeying:=strlinchang+'999'+stryinglinqu;& g+ u/ a# W) [, ]5 H1 z: Y
  ADOQZuoYeQu.SQL.Clear;
4 r7 o! V8 j, _  |1 E$ V  ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');9 Z$ e( S- R0 Y# {* ^/ Y5 B! n
  ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;* e/ P9 x9 M/ G
  ADOQZuoYeQu.Prepared;) w4 t0 I7 Q/ o8 e0 a9 Y# H- c% Y
  ADOQZuoYeQu.Open ;/ S( F- b' _; `) B; U1 y
  while not adoqzuoyequ.Eof8 ]5 |# n8 J/ ^$ d" _+ Z7 e2 w
  do
7 x5 u3 q+ d% |) A  begin
. ~2 l6 {" }2 n# ?    strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ;       <a>file://逐</A>个作业区的代码
/ }; I0 `, y( k: W4 P$ \    strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;
1 G; w1 Y% X2 P7 q. ^4 M' l    ADOQLinBan.SQL.Clear;8 P3 U/ {0 h: N& @; L/ a
    ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');- g# r- R' L5 @: N, C0 b
    ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;2 k( Q9 v( L: j3 J: Z
    ADOQLinBan.Prepared;6 u7 G$ `! }2 m% ~9 }3 B
    ADOQlinBan.Open;
) a2 g# L1 M1 s    while not adoqlinban.Eof5 U9 T( j5 Y6 L/ {; d2 Y  C
    do
$ d% e+ w# h  p0 J0 _, H    begin
/ u( V: i2 c* d' s1 ^: m      strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );6 S  T9 q% g; v# |0 i4 r
      strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
7 j" w0 R7 e8 }3 m, [0 l9 `+ |      adoqxiaoban.SQL.Clear ;: I, e" H+ Z/ {% F
      adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');
( }8 y# u1 F5 W" M5 g      adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;  t* h0 _2 B. f& M( |' E( g
      adoqxiaoban.Prepared ;
, K; Z9 O* Z  c4 b' i' g% e      adoqxiaoban.Open ;) l! X9 y8 Z, r7 f8 Q3 V' S5 c
        while not adoqxiaoban.Eof- l+ A  b3 {' d0 ]1 U
        do
3 A+ z; s0 R3 X5 n        begin
5 F' U, Y  o& T' R7 c' \5 n          strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
! u# W/ f* R& |          strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
9 X2 p# P( ^- J& \1 B# B9 Q          strcode:=strlinban+strxiaoban;! F' M% |5 x- P3 Q4 Z
          adoqs.SQL.Clear ;
$ \+ W+ w. {6 F, e. [5 q/ q          adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');1 {$ Y7 F1 a" }. c4 }" j; i/ N% K
          adoqs.Prepared ;' h; [2 v5 \1 t7 N$ a1 i- i
          try
; H: N) g5 R; D* I# R& Z% a8 F          adoqs.Open ;/ r% E" h! v$ n
          adoqxiaoban.Next ;$ w/ e3 V( z9 q2 ^' r$ o
          except
& \! N- P% m  b5 D7 u9 p# g" z' y          showmessage('出错!');
6 v* _- l; O- R* Y+ j          exit;+ n! ]: `3 H+ w! w" H+ c
          end;4 [" F0 W5 o; }' m# k' J
        end;
2 U# N4 }7 E' g        adoqlinban.Next ;
2 k: v- c$ m" l$ H) A! L& O5 F" l5 f    end;
. F  Z4 e4 W' o/ [+ ~; Z3 I    adoqzuoyequ.Next;
# C" o" Y$ [7 _/ A5 p/ n% x  end;
0 G: c8 f4 q, p8 r8 W0 |& _    adoqyinglinqu.Next ;
& c6 A/ \* i' Q' rend;, R; v6 A' v, i1 W( `. U
  adoqlinchang.Close ;
6 v1 B4 k$ D" Z1 v6 K. e  adoqyinglinqu.Close ;4 h5 R; Z; b3 S3 q0 b; ~$ ]+ j
  adoqzuoyequ.Close ;: ^3 I  ]! V8 X3 C! E
  adoqlinban.Close ;
, q! z0 l" c1 y8 F# F  adoqxiaoban.Close ;
0 Y  F5 R6 f: x! L! W  adoqs.Close ;1 u6 U6 w+ }# m( ]' `' M+ ^
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);8 u. j0 g6 X1 N& t* |; Z6 c! D. g
var
, }, N/ H0 n3 T4 ^; j# p  str1,str2:string;2 n; L$ v+ e4 l7 w
begin
7 D% V$ E4 P. Jstr1:='001';% k' }  M* H5 j) t
str2:='002';8 w: S$ L! U5 e. ?& {! Y
adoquery1.Close ;' Z8 e* p. `: z, z# K2 t
adoquery1.SQL.Clear ;# i4 n# I. Z7 G, X4 F/ w/ N
adoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
" }5 `- X- q. Z5 Q. W* n3 j6 i# r7 ladoquery1.Prepared ;
0 H" N9 \8 e, p$ {  d3 p5 ~adoquery1.ExecSQL ;
  A  a9 Q; O9 e9 Q( ?$ Tend;</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