数学建模社区-数学中国

标题: [求助] 关于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.* p* [" o0 S, d! i; K
     
6 f+ X9 E2 |; g     while not adoqxiaoban.Eof. s+ W/ I) \' z2 H2 X' r; ]! j
     do  p! {- N8 q6 ?
     begin) @9 {. S4 e% d6 l$ Q, e
     strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname(''areacode'').AsString );2 H  A/ F. C4 K( y8 @
     strcodexia=strlinchang+''999''+stryinglinqu+''999''+strzuoyequ+''999''+strlinban+''999''+strxiaoban;
2 i! x3 Q5 f0 E  U) S! X4 `2 P( D% r( b% Z     strcode:=strlinban+strxiaoban;
: W, K. T3 }/ u# R$ s4 b     adoqs.SQL.Clear ;1 R4 U& o) @1 ?9 L5 h9 X  c8 b
     adoqs.SQL.Add(''insert into test1 values(''+strcodexiao+'',''+strcode+'')'');# K  {. h9 v$ i$ Z# v1 s
     adoqs.Prepared ;
7 E% c9 x1 z9 z$ D+ R/ S     try
6 T; B' g+ O" M; L  M2 R. ?     adoqs.Open ;
: ~5 k) H7 L8 O: {3 k6 p( w     adoqxiaoban.Next ;
5 @# Z/ i6 ^  e# W* `     except: G& P2 N( e( m! u/ H$ [4 R. O
     showmessage(''出错!'');8 g+ s2 P' e8 A  \* }) ?; e
     exit;
) M# F2 h4 f8 E0 i- P* Q8 ^/ j     end;
1 F8 u. |! `: S* u" @     end;" {5 J' r- K$ _; b! c
     adoqlinban.Next ;
  F. b' J- w# h  Y" ^$ x2 V. J     4 P% B6 P2 P" I0 t  f6 ~
     这是其中的一段代码 好像出错的就是在这 在adoxiaoban.next那 哪位大虾帮帮忙 很急了
作者: ilikenba    时间: 2005-5-6 10:35
<>我估计是这句的问题adoqs.Open ;6 e& [% \0 Y/ C9 @6 s  ~- m
你先检查一下SQL语句对不对,我这里好多变量不知道,没有办法帮你调试!</P>
作者: penguin    时间: 2005-5-6 13:11
<>好的 我给你全部的代码吧</P><>unit Unit1;</P><>interface</P><>uses
) p5 L  y7 X$ |5 X1 m  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
, i3 P* W4 D' P! E- t  Dialogs, StdCtrls, DB, ADODB;</P><>type
& M+ U/ k1 v7 D. f0 @* w: T+ G  TForm1 = class(TForm)
% h" c  s3 T2 [& D3 r7 o    Edit1: TEdit;
# w- R: b$ H" w2 O" m    Button1: TButton;( @5 m, t2 G; {' m$ ~
    ADOConnection1: TADOConnection;& n. e8 x0 n, ?. N  s  W
    ADOQlinchang: TADOQuery;* ]  G& R1 W8 \
    ADOQyinglinqu: TADOQuery;
. S" }2 l4 z% J8 j/ i: k! x    ADOQzuoyequ: TADOQuery;: Y3 r- `" c' w: |* ^
    ADOQlinban: TADOQuery;+ D& V5 M/ J, q: \( g, m
    ADOQxiaoban: TADOQuery;
) v/ g4 I3 h' c  e: U! |    ADOQs: TADOQuery;/ g' a. j4 c% _" E( I) T9 a
    procedure Button1Click(Sender: TObject);  W8 n4 x0 }  m. v
  private
0 \' a* s0 E* h) K; f: T- s    { Private declarations }
2 d- }: s; J" u+ B0 Q, p  public
: v; v2 n! V: P5 `    { Public declarations }1 m/ o* c( x+ ~* h/ Y5 z5 p: y% ~. a
  end;</P><>var) V# y4 U5 x* H5 V. m. N( T. P
  Form1: TForm1;</P><>implementation</P><>{$R *.dfm}</P><>procedure TForm1.Button1Click(Sender: TObject);1 V. V1 d7 ^4 m6 _  y2 }9 K
var
7 a% f9 m. d/ ]strlinchang,stryinglinqu,strzuoyequ,strlinban,strxiaoban,strcodezuo,strcodeying,strcodelin,strcodexiao,strcode:string;
0 O# ^8 m' i6 k. q9 Ubegin+ U# S8 `6 Q+ m3 H7 a# ^0 n% j
adoqlinchang.Close ;0 w# R# U8 U0 }- d5 R& X
adoqyinglinqu.Close ;0 |9 O- e9 q( V! K1 k8 M' _3 v
adoqzuoyequ.Close ;
) U4 y& d; u5 {( F  dadoqlinban.Close ;
4 G# ?" K8 B2 N* D) C5 radoqxiaoban.Close ;
  M$ a3 j7 r. i1 D1 y2 Zadoqs.Close ;
. I7 p0 n, D5 P! ^$ `4 ~* k- A" d# vadoqlinchang.SQL.Clear ;) m- R5 I( d/ f
adoqlinchang.SQL.Add('select areacode from tfsareacode where areaname=:linc');2 t. W1 V8 b3 O8 O1 X: n
adoqlinchang.Parameters.ParamByName('linc').Value :=edit1.Text ;; x: q. e6 {7 f; O$ X
adoqlinchang.Prepared ;. X' v0 C( u6 R3 i' M- G
adoqlinchang.Open ;5 }" q$ L- r0 q/ l9 Q& U% x
strlinchang:=trim(adoqlinchang.Fields.fieldbyname('areacode').AsString );
1 Z2 a$ I' v7 M  Z  N% l$ wadoqyinglinqu.SQL.Clear ;
7 }! f, g% l$ c, T4 cadoqyinglinqu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linc');
  B9 g1 K. V1 F+ Ladoqyinglinqu.Parameters.ParamByName('linc').Value :=edit1.Text ;
: B( J; G" {, D& g$ \adoqyinglinqu.Prepared ;. @! N+ v7 z4 Z/ u9 I6 `
adoqyinglinqu.Open ;- l& ^3 |5 R; l$ g* Y
while not adoqyinglinqu.Eof- A+ T* `5 m1 H0 |# }8 |0 P/ @
do( F( B! ^. r6 v0 b
begin
' v- K5 G! N# C$ ]/ Z8 l  stryinglinqu:=trim(adoqyinglinqu.Fields.fieldbyname('areacode').AsString );
6 W! T% o8 V% n: F+ L+ \2 Z  strcodeying:=strlinchang+'999'+stryinglinqu;
( I3 |9 }% {. I  ADOQZuoYeQu.SQL.Clear;; f8 h) |5 c9 L/ _4 J1 u
  ADOQZuoYeQu.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:yinglq');
' }2 g( Q7 E: q% Q1 W! u/ k4 _  ADOQZuoYeQu.Parameters.ParamByName('yinglq').Value:=ADOQYingLinQu.Fields.fieldbyname('areaname').Value ;8 i3 v* S2 m8 a
  ADOQZuoYeQu.Prepared;' B, u+ H- ]! @9 G! T) h
  ADOQZuoYeQu.Open ;
; Y: F% \! x! G9 c+ O# b! j  m  while not adoqzuoyequ.Eof7 L  U3 x5 ?8 w. Q3 o0 Y& ~6 ^
  do
! G! X- y* {! s: q6 f  begin8 N. x; Y) \2 x2 e" C4 x* L; }% ]7 r5 x
    strZuoyequ:=ADOQZuoYeQu.Fields.fieldbyname('areacode').AsString ;       <a>file://逐</A>个作业区的代码3 P. a) |9 d7 i
    strcodezu=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ;) j) v; n& z. x+ R9 M
    ADOQLinBan.SQL.Clear;* G5 e6 Y! v5 R  V& t: w
    ADOQLinBan.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:Zuoyq');! J& d9 b8 T; j: p9 Y
    ADOQLinBan.Parameters.ParamByName('Zuoyq').Value :=ADOQZuoYeQu.Fields.fieldbyname('areaname').Value ;
' U, x7 O' m; }# z5 C    ADOQLinBan.Prepared;& b5 p8 d& z0 A. i4 {; f3 l
    ADOQlinBan.Open;0 V5 J0 j5 z6 J8 i4 a- a
    while not adoqlinban.Eof
: U# H. c/ O# a/ A) Q    do1 R% @/ k( n1 _5 @8 l' \$ F
    begin; h0 f5 H' B# f. L
      strlinban:=trim(adoqlinban.Fields.fieldbyname('areacode').AsString );
, r3 M& v8 x) E. n  @; Q! _; A+ _      strcodelin:=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban;
! @9 A- U: ?" `/ a      adoqxiaoban.SQL.Clear ;3 W1 }) P/ g9 d9 c, o4 ?9 L- V* V7 r
      adoqxiaoban.SQL.Add('select areaname,areacode from tfsareacode where fatherarea=:linb');# h# z, F9 s# S- k/ D- U
      adoqxiaoban.Parameters.ParamByName('linb').Value :=adoqlinban.Fields.fieldbyname('areaname').Value ;5 q' J7 s' j0 X) z6 o. E( n3 H
      adoqxiaoban.Prepared ;0 ^6 F( [( X. i+ P7 ^1 @' Y
      adoqxiaoban.Open ;1 X0 @! z  o6 l5 y" l; S
        while not adoqxiaoban.Eof7 ~; |: K* A" I- N0 k4 B( N. b
        do2 l/ {% k0 Y1 b$ _& R6 C
        begin1 b& o3 Q! Z& u8 M  S9 r. n
          strxiaoban:=trim(adoqxiaoban.Fields.fieldbyname('areacode').AsString );2 {+ |- q' a; s* s$ b" g/ p
          strcodexia=strlinchang+'999'+stryinglinqu+'999'+strzuoyequ+'999'+strlinban+'999'+strxiaoban;
! i% _/ C$ E: }          strcode:=strlinban+strxiaoban;1 Z6 T$ m+ z# S+ b, i4 x5 O
          adoqs.SQL.Clear ;( F- c% d  F" U# G) Q
          adoqs.SQL.Add('insert into test1 values('+strcodexiao+','+strcode+')');
0 K' ^% x( f0 J8 X' Y* c; l          adoqs.Prepared ;
1 G' ^. _% L- C- K2 u: ]& f! j1 P7 C          try: c2 N1 a4 H2 R3 @* r7 s+ T, B
          adoqs.Open ;- t4 o1 h! s8 y, u2 G, D6 u
          adoqxiaoban.Next ;$ K/ X9 B, X7 Q1 P' D+ d1 B
          except; d3 F( X6 A$ z' ~! X# `
          showmessage('出错!');, e9 Y$ X) F# a
          exit;
4 O/ v, Y" l; j  J2 e2 Y          end;
. N7 q* H0 |* j, ?. ?. c        end;, I9 [) u* Y/ h  }
        adoqlinban.Next ;
0 i0 ~, m$ ~/ C    end;
) y- B4 p( k& P% R/ T; F0 r  k    adoqzuoyequ.Next;
$ t. V( \' L( |* p( D. e. F  end;! r5 N$ ]( o4 L% Y2 u+ {
    adoqyinglinqu.Next ;
& I; Y' n9 D$ \$ C3 T& ]# O0 c( Aend;
9 ?3 g8 Z8 g& s# H7 K* e! S  adoqlinchang.Close ;# S1 [8 H* Z' V% Z
  adoqyinglinqu.Close ;. u4 C$ X5 r* ]5 r
  adoqzuoyequ.Close ;
" a! `* m9 C  Y$ D. W2 x  adoqlinban.Close ;8 s: _, e( P, ]5 l) {; `/ Q
  adoqxiaoban.Close ;
  S( W" m3 g7 g" W  adoqs.Close ;
! z5 d, y1 E4 k2 Xend;</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);
9 J) ^  t5 G" d( d: t8 @var6 U# M  _1 h9 E2 o$ p' x
  str1,str2:string;
9 Y. z- i0 O7 w. I# v* j* zbegin
0 H4 f+ d: ?, `2 ]) cstr1:='001';3 r# @" @+ M* M$ Q/ F: K' [
str2:='002';
+ W& C2 e$ L; C3 yadoquery1.Close ;8 H6 v& ]5 r) `8 d8 l+ E( G% r
adoquery1.SQL.Clear ;
* r$ }  ^  G! {! d0 B/ ~3 @, j& }adoquery1.SQL.Add('insert into test1 values('+str1+','+str2+')');
3 u) L7 c* L' F% [9 F4 `/ Padoquery1.Prepared ;; @  M4 Y! W$ F: D- S: X
adoquery1.ExecSQL ;
' u1 b  x' U( v7 J! ]1 \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