数学建模社区-数学中国

标题: [求助] 关于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.
- y+ L% ]2 g5 ]4 x6 _4 L     + c+ c7 ^. Q% M* [) `3 p/ ]
     while not adoqxiaoban.Eof
9 J4 q5 d9 J$ c+ D1 W     do0 ?) F9 i1 n# c+ v  U3 x: d0 S
     begin$ b; g1 N- r& W1 q+ U% c4 j5 Z7 [
     strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );. Y( Y: v! E6 z" r5 m
     strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;& s& v, t5 |/ M4 \
     strcode:=strlinban+strxiaoban;8 O/ Z1 P4 x7 c9 ]
     adoqs.SQL.Clear ;8 x( i$ b4 `) \8 A- |7 F5 w% D( \
     adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');
2 W: g- v0 {2 [+ z9 Q% ]     adoqs.Prepared ;
4 J! q1 p. P/ n) y+ z. \! l# E) l     try$ A5 K4 U/ z2 W8 h3 C, e0 E- P$ ?
     adoqs.Open ;
3 W" W6 m9 n8 f8 C     adoqxiaoban.Next ;) w. i) D8 O: t' [, z4 Q/ b1 i
     except- _* d9 r1 k6 x/ k! h
     showmessage(''出错!'');
% A. H+ D* B- x" x( g' h& _6 w     exit;9 X! J' F1 K- c6 V; L" P) N
     end;. @4 b4 G  z4 }+ E
     end;
* K1 v. J7 o! O1 p     adoqlinban.Next ;% \4 d* m) X) u
     
6 }. l8 w- T+ x2 }" ?5 z& T     这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者: ilikenba    时间: 2005-5-6 10:35
<>我估计是这句的问题adoqs.Open ;9 M. s* J& o' g: I3 \6 L
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者: penguin    时间: 2005-5-6 13:11
<>好的 我给你全部的代码吧</P><>unit Unit1;</P><>interface</P><>uses
, l$ |) N9 W/ b. h" |4 M  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,3 p# y; ~  B  o2 ~# _
  Dialogs, StdCtrls, DB, ADODB;</P><>type7 }" m$ ~' }- c' q/ E0 N
  TForm1 = class(TForm)9 a8 D1 c2 M+ f/ {. d
    Edit1: TEdit;2 x- [: e' [% m4 l0 i) ?
    Button1: TButton;* n' A$ p2 t' `3 ?0 M* j
    ADOConnection1: TADOConnection;
/ F0 R# D9 h0 y3 v& A) K    ADOQlinchang: TADOQuery;* B& f* {9 C$ _2 [0 O2 e0 X
    ADOQyinglinqu: TADOQuery;
& X: H+ h( V/ [  ~( a8 q. R, {    ADOQzuoyequ: TADOQuery;4 k( t2 e+ ]' J1 J  c# a
    ADOQlinban: TADOQuery;! F7 B% ?  K. C' |! R
    ADOQxiaoban: TADOQuery;6 ^* }; U% b* a5 F: w
    ADOQs: TADOQuery;8 ?' k' m" @  [, a
    procedure Button1Click(Sender: TObject);
8 R: ~- D7 J0 a; N/ |  private
+ }6 U6 Q* w% \5 ]# S5 H( W- M    { Private declarations }
* {" L$ P# y5 {$ l: T  public
0 a5 v; j& Y8 d7 [9 W    { Public declarations }4 |7 e6 x% q+ k, P, f5 c0 a
  end;</P><>var  M3 ?( @  Z5 O( h" X" D; D
  Form1: TForm1;</P><>implementation</P><>{$R *.dfm}</P><>procedure TForm1.Button1Click(Sender: TObject);% }; v- I5 H3 `% E3 g' }' W
var
, g) [$ i/ W6 \2 i; M* Pstrlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;5 F/ G' p1 a0 G& ?4 S
begin
4 m3 x. |; X( V8 Radoqlinchang.Close ;, `$ Z6 [/ C, I* k- t6 m
adoqyinglinqu.Close ;
- Z8 x6 {/ H, {- S* v1 B, j2 Z  sadoqzuoyequ.Close ;
6 x  ?% S2 K5 I, Padoqlinban.Close ;! e: h8 I" ~- Z6 P, w% z
adoqxiaoban.Close ;
7 C, Y9 z( \8 l/ W" Z$ yadoqs.Close ;" J0 B# K4 D8 ^; s2 k' k
adoqlinchang.SQL.Clear ;
4 D/ k" r. D! |! ]$ Hadoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');8 h$ x% |* I# ~5 |8 ?3 {
adoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;; r, q* u9 P) C( E- }+ l' W" V
adoqlinchang.Prepared ;$ M. `& z# H! J0 T( l$ T
adoqlinchang.Open ;
7 D" M4 W( b; mstrlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
- @/ w8 j) ^2 D8 D0 x: o/ I( Hadoqyinglinqu.SQL.Clear ;
7 ]3 h: E8 |$ I! Sadoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');7 f( w/ O0 |- P+ G1 t# A" z
adoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
- ?. W, q" J7 G9 L* iadoqyinglinqu.Prepared ;
' h+ h1 i. e% w2 y/ U, Badoqyinglinqu.Open ;5 [7 E( z+ e; S  N3 k- }# V
while not adoqyinglinqu.Eof
8 z" D1 }; z- p/ P" e, ?do3 J9 Q) C, j. S% H$ v3 I6 U+ f
begin* Z/ K5 ~! A' i2 P4 h* i
  stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
0 ]0 Z7 N$ r" h- L! f  strcodeying:=strlinchang+'999'+stryinglinqu;. I0 Q6 q4 b" M# S3 y
  ADOQZuoYeQu.SQL.Clear;
! x: P+ @& D7 G' `3 }3 i! F  ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
( E3 e& D$ ?8 O2 ~. C. X2 d  ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;7 @9 P0 I4 a& [) u3 N$ R# k2 j
  ADOQZuoYeQu.Prepared;. b+ C6 w7 J2 d9 |8 l% n+ |* |7 J2 n
  ADOQZuoYeQu.Open ;
. v5 h: C8 l2 @) Q5 m2 e  ?' \7 p  while not adoqzuoyequ.Eof
- p2 E, b' u6 ?3 K( H5 Z+ D( h  do
4 j! B0 _" d2 R. v2 ^: }" G  begin
% ~# e- }4 W9 p6 G& h/ ~4 t2 n# ^* M    strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ;       <a>file://逐</A>个作业区的代码  c% H0 I* t6 y: K4 \6 \
    strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;
4 d( x( {3 m7 ]% M: z0 ~! @4 h, V    ADOQLinBan.SQL.Clear;$ z1 J! t, q* `% I# ?0 s
    ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');
4 `) j# ]5 X$ J6 H0 \    ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;6 [* n: [$ W3 P; B3 {6 E0 Y! J' A
    ADOQLinBan.Prepared;4 Z% }0 F# S: V$ w- p7 p
    ADOQlinBan.Open;
0 A1 c. v) d7 d    while not adoqlinban.Eof7 y; c5 y4 }+ r0 T& d  `
    do( o; s6 a7 s, S( K7 {5 J; E
    begin
. g7 x4 N8 M% Q. A      strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
  |" s: c( ~" n      strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
2 x# Q4 s: P% b: {  T% _      adoqxiaoban.SQL.Clear ;: z. G/ o; O# h* s3 W9 d2 H3 v9 B
      adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');
- i+ n" r: M+ u8 F  U      adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;( r) o9 K. j( _4 A* s
      adoqxiaoban.Prepared ;, A! m, l7 s0 Q& F+ b1 M5 }: \
      adoqxiaoban.Open ;+ g: |5 }+ _/ _' z$ V* b
        while not adoqxiaoban.Eof; f. S2 M1 q2 @  f. }& C( w6 l
        do0 W  p! P; W6 t9 c
        begin2 j1 H( k8 U+ x& R7 B( L$ B% k1 H
          strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );
+ D" d3 J1 M* V; i          strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
& h9 B8 o2 L- a          strcode:=strlinban+strxiaoban;
9 l6 z( f! _( @# u* j/ |. z          adoqs.SQL.Clear ;. p' J1 H* |. F9 ]( l" _- f- F: g
          adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
, R; b' G: U6 N0 Z          adoqs.Prepared ;$ P- n1 J" l/ t. O
          try
) }( ^6 i+ m9 ]* u& \          adoqs.Open ;9 t. A" q6 p$ k& z% t" \& E
          adoqxiaoban.Next ;2 q- P8 u! ]3 A9 E0 p8 C# Q
          except; z; Z8 Y) k" W2 h% h1 ]
          showmessage('出错!');  a6 S6 f7 M% h/ W
          exit;
/ V* O# ^, K: W( P0 G          end;4 C3 m: q9 ~; @" n
        end;
5 I( E, N7 ?2 f4 H, b8 Y* v6 X        adoqlinban.Next ;
$ i3 A* P! T) b/ j$ `, ~    end;2 v0 \% E; b( q6 X
    adoqzuoyequ.Next;3 _: c* i, w+ X6 l1 |' U# }+ t
  end;
/ {, G9 x' z8 W7 w( Q1 I    adoqyinglinqu.Next ;
9 Y3 b& R5 D$ K- mend;$ s! u) q3 M3 ]0 v' f, M' j
  adoqlinchang.Close ;
" S: T5 L) {; A* k  adoqyinglinqu.Close ;
  r; [+ d7 B& K1 |  adoqzuoyequ.Close ;
$ [: N6 r' j3 G  adoqlinban.Close ;- x; j( [/ a4 u3 R
  adoqxiaoban.Close ;
$ c& w( _# g5 I7 s& C  L  adoqs.Close ;5 }; f7 X: V$ J/ 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);" [& q4 ?* a. ~: G/ E. z  X
var, |& d& _0 Q# ]# K8 [% V9 d
  str1,str2:string;
" l$ [/ V% Y# Kbegin9 J2 ~1 L8 b4 Y- u: y8 A
str1:='001';: B1 g) W- i( Y& a* }
str2:='002';
& O1 F/ z, I, u# b/ v, C5 R, K: Yadoquery1.Close ;
- U& w" t* j- M6 H6 j0 fadoquery1.SQL.Clear ;
. Q2 s" x* i! M6 Y' \0 P8 yadoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');2 }+ |5 \$ S6 s: \8 s- w- j
adoquery1.Prepared ;
+ j! M& f3 M) Q! S" i, N' P3 o- Padoquery1.ExecSQL ;
, c5 |3 T0 h& v  ?* Iend;</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