数学建模社区-数学中国

标题: [求助] 关于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><>type5 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
  private1 _& 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><>var7 \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. Rstrlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;! t% A+ F0 I$ q3 G( U
begin9 A, l8 E, P1 T( w, v1 q
adoqlinchang.Close ;
* E( X& _. T" \4 Ladoqyinglinqu.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 \$ vadoqxiaoban.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/ Nstrlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
3 s9 T  f3 ~* J- O( B' Vadoqyinglinqu.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.Eof0 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
  begin3 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    begin5 ]" 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" @! Pend;</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" Pvar  ]/ 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 Xadoquery1.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, eadoquery1.Prepared ;
3 n+ m) g7 b/ \" `2 n! G+ e' o- Tadoquery1.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