Q&A

  • db에 저장을 하는데 왜 에러가 나는지 모르겠네요...
db는 엑세스고, 필드명은 num,name,kor,eng,mat,sum,avg,rank입니다.

procedure TForm1.Button3Click(Sender: TObject);

   var
   i: Integer;
   tmpMessageStr: String;
   tmpException: Exception;
begin
  

   With dxTL1, ADOQuery1 Do
   Begin
      For i := 0 To Count-1 Do
      Begin
         Close;
         Sql.Clear;
         Sql.Add('select * ');
         Sql.Add('from 성적 ');
         Sql.Add('where Num = :paraNum ');
         Parameters.ParamValues['paraNum'] := Items[i].Strings[dxTL1KeyNum.Index];
         ShowMessage('0');
         Open;
         ShowMessage('1');
         If RecordCount > 0 Then
         Begin
          ShowMessage('2');
            Close;
            Sql.Clear;
            Sql.Add('update 성적 ');
            Sql.Add('   set Num = :paraNum, ');
            Sql.Add('       name = :paraname, ');
            Sql.Add('       kor = :parakor, ');
            Sql.Add('       eng = :paraeng, ');
            Sql.Add('       mat = :paramat, ');
            Sql.Add('       sum = :parasum, ');
            Sql.Add('       avg = :paraavg, ');
            Sql.Add('       rank = :pararank ');
            Sql.Add('where Num = :parakeyNum ');
            Parameters.ParamValues['parakeyNum'] := Items[i].Strings[dxTL1KeyNum.Index];
            ShowMessage('3');
         End {If RecordCount > 0 Then}
         Else
         Begin
          ShowMessage('.');
            Sql.Add('insert into 성적 ');
            Sql.Add('       ( ');
            Sql.Add('        num, ');
            Sql.Add('        name, ');
            Sql.Add('        kor, ');
            Sql.Add('        eng, ');
            Sql.Add('        mat, ');
            Sql.Add('        sum, ');
            Sql.Add('        avg, ');
            Sql.Add('        rank ');
            Sql.Add('       ) ');
            Sql.Add('values ');
            Sql.Add('     ( ');
            Sql.Add('      :paranum, ');
            Sql.Add('      :paraname, ');
            Sql.Add('      :parakor, ');
            Sql.Add('      :paraeng, ');
            Sql.Add('      :paramat, ');
            Sql.Add('      :parasum, ');
            Sql.Add('      :paraavg, ');
            Sql.Add('      :pararank ');
            Sql.Add('     ) ');

         End; {Else}

         Try
            ADOQuery1.ExecSQL;  ====> 업데이트시 에러~
         Except
            Exit;
         End; {Try}
      End;
   End;
end;
3  COMMENTS
  • Profile
    Galaxy 2004.07.15 20:51
    안녕하세요
    수고 많습니다.

    소스 전체 입니까?
    일부분만 올린것입니까?

    아래에서 Parameters는 다 어디에 가서요...
    에러 내용이 무엇인지는 모르겠지만 아래 내용을 보면 이런에러가
    뜨지 않을까 측축 해봅니다.
    ':paraname' not found가 뜨지 않을까요
    그럼 수고 하세요

                Sql.Add('   set Num = :paraNum, ');
                Sql.Add('       name = :paraname, ');
                Sql.Add('       kor = :parakor, ');
                Sql.Add('       eng = :paraeng, ');
                Sql.Add('       mat = :paramat, ');
                Sql.Add('       sum = :parasum, ');
                Sql.Add('       avg = :paraavg, ');
                Sql.Add('       rank = :pararank ');
                Sql.Add('where Num = :parakeyNum ');
                Parameters.ParamValues['parakeyNum'] := Items[i].Strings


  • Profile
    빈곤클럽야수 2004.07.15 22:22
    답변감사합니다.
    전부는 아니고 저장부분만 올렸습니다.
    말씀하신 파라미터를 다 넣었더니 업데이트 구문오류라고하는데...
    어디에 오류가 났는지 모르겟네요...한번만 더 살펴주세요~

    Parameters.ParamValues['paraNum'] := Trim(Items[i].Strings[dxTL1Num.Index]);
                Parameters.ParamValues['paraname'] := Trim(Items[i].Strings[dxTL1Name.Index]);
                Parameters.ParamValues['parakor'] := Trim(Items[i].Strings[dxTL1kor.Index]);
                Parameters.ParamValues['paraeng'] := Trim(Items[i].Strings[dxTL1eng.Index]);
                Parameters.ParamValues['paramat'] := Trim(Items[i].Strings[dxTL1mat.Index]);
                Parameters.ParamValues['parasum'] := Trim(Items[i].Strings[dxTL1Tot.Index]);
                Parameters.ParamValues['paraavg'] := Trim(Items[i].Strings[dxTL1Avg.Index]);
                Parameters.ParamValues['pararank'] := Trim(Items[i].Strings[dxTL1Seq.Index]);
                Parameters.ParamValues['parakeyNum'] := Trim(Items[i].Strings[dxTL1KeyNum.Index]);
  • Profile
    Galaxy 2004.07.15 23:06
    안녕하세요
    수고 많습니다.
    제가 보기에도 구문이 틀린곳은 없는것 같은데...
    조금 수정을 해보았는데 맞는지 모르겠네요....
    올바른 답을 주지못해서 죄송합니다.
    그럼
    수고 하세요
    Try
    Dm1.DataBase1.StartTransaction;
    With dxTL1, ADOQuery1 Do
           Begin
           For i := 0 To Count-1 Do
                Begin
                Close;
                Sql.Clear;
                Sql.Add('select * ');
                 .....................
                Open;

                If RecordCount > 0 Then
                  With ADOQuery2 do
                       Begin
                       Close;
                       Sql.Clear;
                       Sql.Add('update 성적 ');
                       Sql.Add('   set Num = :paraNum, ');
                       .................................................
                       ADOQuery2.ExecSql; //이렇게 해보았습니다.
                       End
                Else
                   Begin
                   With ADOQuery3 do
                         Sql.Add('insert into 성적 ');
                          .................................
                         ADOQuery3.ExecSql;//이렇게 해보았습니다.
                   End;
                ADOQuery1.Close;
                End;
          End;
       End;
    Dm1.DataBase1.Commit;
    except
    Dm1.DataBase1.RollBack;
    Application.MessageBox(PChar('Data Save Failure...  Please Retry!!!'),
                                    'Confirm',mb_Ok+mb_iconwarning);
    end;

    end;