数学建模社区-数学中国

标题: [求助] 关于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
     try4 ?. ^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     except6 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! Kbegin* F! T1 J) t0 S) K
adoqlinchang.Close ;
, ~: ~8 Y. ~- K; |0 @adoqyinglinqu.Close ;
& v4 f- h7 u4 hadoqzuoyequ.Close ;
$ G- ], a- \+ l6 S4 @0 H+ vadoqlinban.Close ;
- _7 C; j' e) t0 B& |/ i8 ^( Sadoqxiaoban.Close ;! A' @) G6 W+ a* ~" v
adoqs.Close ;
$ }4 k8 B$ ?( M9 w$ Z( qadoqlinchang.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 Badoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;
8 Z# p% v  f5 |7 d& A5 n9 M4 v5 jadoqlinchang.Prepared ;
- a- l: D: L. G8 u' w2 O6 p7 }adoqlinchang.Open ;
0 |; c; l2 c/ q! ustrlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
& z; L! q; R) [! ]/ s! }5 gadoqyinglinqu.SQL.Clear ;
/ C4 K* L1 X& a! V  l/ jadoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
( @$ s$ J2 p/ V( s0 J( C3 d  K+ eadoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;  b6 L6 @% l& g3 k2 s$ o. s1 M7 \( w
adoqyinglinqu.Prepared ;
( g) L, u( _$ sadoqyinglinqu.Open ;! \' G. H1 l! o- P
while not adoqyinglinqu.Eof8 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.Eof8 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 istr1:='001';
( x0 u0 D8 _1 b7 a& X4 W! gstr2:='002';
, j0 f4 W5 i) h8 h, @; radoquery1.Close ;
3 q& V: U* s8 ?/ K- i( nadoquery1.SQL.Clear ;
$ o6 _# ~5 |) k' P, l1 tadoquery1.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