Q&A

  • procedure
procedure 를 dll 로 만들어서 프로그램을 하려 합니다.

근데 그리드의 RowCount에 값을 넣으려 하면 error가 나요...

procedure SearchFail( sqlOra : TQuery; tmpgrid : TAdvStringGrid; acc, perd : Integer;
                      perdS, idno, taxno, ownr_name : String );
var i : integer;
    TempF : String;
begin
   With sqlOra, tmpgrid do begin
      Close;
      Sql.Clear;
      Sql.Add('select LVY_NO  FROM ENVTNA2BCR');
      Sql.Add('  Where PERD Like :PERD and (RECPT_AMT = 0 or RECPT_AMT IS NULL)    ');

      If acc >= 1 then
         Sql.Add('  and BEA_MNEY_GBN = ' + IntToStr(acc) );
      If Length(Trim(idno)) <> 0 then
         Sql.Add('  and OWNR_SID like ''' + idno + '%''' );
      If Length(Trim(taxno)) <> 0 then
         Sql.Add('  and BEA_MNEY_NO = ''' + taxno + '''' );
      If Length(Trim(ownr_name)) <> 0 then
         Sql.Add('  and OWNR_NM = ''' + ownr_name + '''' );
      If perd = 0 Then
         ParamByName('PERD').AsString := '%'
      Else
         ParamByName('PERD').AsString := perdS+'%';

      Sql.Add(' Group By OWNR_SID, PERD, OWNR_NM, LVY_NO       ');

      Open;
      if recordcount = 0 then begin
         Showmessage('해당 자료가 없습니다');

         Close;

         Exit;
      End;

      TempF := '';
      While Not Eof do begin
         TempF := TempF + ''''+Fields[0].AsString + '''';

         Next;

         if not eof then TempF := TempF + ',';
      end;

      Close;
      SQL.Clear;
      SQL.Add( 'select LVY_NO, OWNR_NM, BEA_MNEY_NO, OWNR_SID, PERD from ENVTNA2BCR ' +
               ' where LVY_NO in ( ' + TempF + ' )' );
      Open;

      i := 0;
      While not EOF do begin
         i := i + 1;

         Cells[1, i] := ConvertDataToLength( FieldByName('OWNR_SID').AsString );
         Cells[2, i] := FieldByName('OWNR_NM').AsString;
         Cells[3, i] := FieldByName('BEA_MNEY_NO').AsString;
         Cells[8, i] := FieldByName('LVY_NO').AsString;
         Cells[9, i] := FieldBYName('PERD').AsString;

         Next;
      end;

      if i = 0 then i := 1;
      RowCount := i + 1;

      Close;
      SQL.Clear;
      SQL.Add( 'select LVY_NO, ANC_AMT, RECPT_AMT ' +
               'from CMMTNINCMRSLT where LVY_NO in ( ' + TempF + ' )' );
      Open;

      While not EOF do begin
         for i := 1 to RowCount - 1 do begin
            if Cells[8, i] = FieldByName('LVY_NO').AsString then begin
               Cells[4, i] := FormatFloat( '#,##0', FieldByName('ANC_AMT').AsInteger );

               Break;
            end;
         end;

         Next;
      end;

      Close;
      SQL.Clear;
      SQL.Add( 'select LVY_NO, RECPT_YMD, CHENAP_AMT, HAD_AMT from CMMTNINCMARR ' +
               ' where LVY_NO in ( ' + TempF + ' )' );
      Open;

      While not EOF do begin
         for i := 1 to RowCount - 1 do begin
            if Cells[8, i] = FieldByName('LVY_NO').AsString then begin
               Cells[5, i] := FormatFloat( '#,##0', FieldByName('CHENAP_AMT').AsInteger );
               Cells[6, i] := FormatFloat( '#,##0', FieldByName('HAD_AMT').AsInteger );

               if FieldByName('RECPT_YMD').AsString = '' then
                  Cells[7, i] := '압류';

               Break;
            end;
         end;

         Next;
      end;

      Close;

      i := 1;

      While i <= RowCount - 1 do begin
         if ( Cells[4, i] = '' ) or ( Cells[4, i] = '0' ) then
            RemoveRows( i, 1 )
         else
            i := i + 1;
      end;
   end;
end;


이부분이 dll에서 코딩한 내용입니다.

   SearchFail( DM1.qryOra1, sg2, cbAcct2.ItemIndex, cb_PERD2.ItemIndex,
                    cb_PERD2.Text, EDT_OWNR_SID.Text, EDT_BEA_MNEY_NO2.Text, EDT_OWNR_NM2.Text );


main에서 호출하는 부분이구요

procedure SearchFail( sqlOra : TQuery; tmpgrid : TAdvStringGrid; acc, perd : Integer;
                      perdS, idno, taxno, ownr_name : String ); far; external 'search_fail.dll';


main에서 정의를 내린 부분입니다.

멀 잘못한건지 몰것거든요...
2  COMMENTS
  • Profile
    이중철 2004.08.19 04:43
    메인과 DLL의 Memory Heap이 틀린것으로 알고 있습니다.

    즉, 메인의 어떤 포인터 변수를 가지고 DLL에서 GetMem을

    하면 문제가 발생하는거죠 , 그 반대도 마찬가지이고요

    아래의 문제에서 RowCount에 값을 넣는다는 것은

    곧 tmpgrid(객체변수, 포인터)의 내부의 변수를

    GetMem을 하여 Size를 재조정하는 것으로 위의문제에 걸리죠

    일반적인 스탠다드 DLL은 아래방식으로는 불가능 하다고 봅니다..

    볼랜드에서 제공하는 뭐더라 BorlandMem.dll 인가뭔가 하는거

    첨부해서 해보세요(DLL 프로젝트 만들때 처음에 주석으로 뭐라고

    나오는데 그거 한번 써보세요) 확인은 안했지만 될지도 모름

    제가 쓰는 방법은 확장DLL 즉, bpl인가 이것도 까먹네 쩝,

    이것을 만들어 쓰는방법, 또는 스탠다드에서는 미리 GetMem을 끝내고

    전송하는 방법, 그리고 꼭 리사이즈잉 꼭 필요할때는 TMemoryStream을

    사용해서 전송해요 이놈은 다른 Memory heap을 쓰는듯 해서 무리없이

    통신이 됩니다.

    여기까지 제 경험상 이고요 내용상 제가 틀린부분도 있을거에요

    틀린점 있으면 지적하시고요 그럼이만,

  • Profile
    신강섭 2004.08.20 23:46
    음.. DLL 작성하실때 하나 주의점이 있습니다.
    DLL 생성시 기본적으로 생긴 주석문을 보시면
    String 형을 사용하지 말라고 나와있습니다.
    PChar 자료형을 적절히 이용하셔야 할듯 싶네요
    저도 전에 String 형 때문에 애를 먹었던 기억이 나네요
    • 임병설
    • 2004.08.20 20:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • srookie
      2004.08.21 01:05
      안녕하세요. 그 프로그램 자체가 멀티랭귀지가 고려되지 않고 Compile되었다면 단순한 방법으로는 한글로 ...
    • 꿈의대화
      2004.08.21 00:13
      .
    • 퇴프
      2004.08.21 06:43
      크랙하면 코드에서 글자가 어떤 형태로 나오지요? 문자 그대로 나오지는 않을것 같은데요.. 델파이 폼스...
    • 오재열
    • 2004.08.20 19:52
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.08.20 20:16
      1. 저도 그 문서보고 따라 한거라서 뭐가 정답인지는 모르겠지만 두 개중에 어떤 걸 설치해도 괜찮을 것 같...
    • 노상협
      2004.09.22 02:49
      -_-);; 죄송한데요..저두 받으신 문서 받을수없을까여?? 저두 ACTIVEX 로 해보구 싶은데.... uses 절에 C...
    • 오재열
      2004.08.20 20:29
      죄송합니다. 자꾸만 여쭤 보네요.. TCrystalActiveXReportViewer  //<----- 이녀석은 어디...
    • 서기원
      2004.08.21 00:37
      앗.. 죄송.. 제가 크리스탈 리포트 10을 설치해서 그런가 봅니다. 문서를 보니 CRViewer9이랑 같은 놈입...
    • 오재열
      2004.08.21 01:45
      정말 죄송한데요.. TApplication 이라는 녀석 어떤 유닛에서 나오는 거죠? 자꾸 에러가 나서 따라 가보...
    • 서기원
      2004.08.21 02:16
      제 소스에서는 CRAXDRT_TLB.pas로 가는데요..^^ 이렇게 써도 되는지는 모르겠지만, Application1 : CR...
    • 김영민
    • 2004.08.20 19:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영민
      2004.08.21 00:05
      Controls.pas에 이렇게 되어 있군요... 메시지 정의 CM_DOCKCLIENT     &nbs...
    • 김길현
    • 2004.08.20 15:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김길현
      2004.08.27 01:13
      안녕하세요.   일단 프로그램밍하다 보니, 막히더군요.   여러 소스를 다운 받...
    • 이태형
      2004.08.20 23:06
      저도 전에 에러가 나서 텍스트 파일로 가지고 있던건데요 에러코드 내용은 다음과 같습니다. 응답 ...
    • 김회석
    • 2004.08.20 07:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김기원
      2004.08.20 18:38
      안녕하세요.. Unit2가 그냥 Unit이라면... Uni2에 전역변수를 설정 후 사용 하시면 됩니다. Unit1 에...
    • 문의득
    • 2004.08.20 05:02
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김영민
    • 2004.08.19 22:29
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오철환
    • 2004.08.19 20:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.08.19 22:57
      님의 말씀이 맞고요 만약 전송속도 제한이 있을경우에는 틀리겠지만 그렇게 전송제한을 둔것 같지않...
    • 이중철
      2004.08.19 23:03
      내용파학하기가 무지 어렵거든요 파일생성후 업데이트 <- 무슨파일인지? 가지고 온데이타들을 일...
    • 임병설
    • 2004.08.19 06:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • help me
    • 2004.08.19 00:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이태형
      2004.08.19 01:16
      델파이에서 Porject/Options 선택해서 Directory/Conditionals 탭에 BlowFishEncryption를 입력하면, 1번...
    • 徐永努
    • 2004.08.19 00:07
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 데빠이
      2004.08.24 19:47
      저두 FB(IB) 사용하지만 굳이 BDE 연결해서 사용하지는 않기때문에 몇자 올립니다. 저 같은 경우 BDE 사용...
    • 장태원
      2004.08.19 01:24
      BDE 와 상관없이 서버에서 접속을 거부를 하는듯 합니다.
    • 허성준
    • 2004.08.18 22:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 유정헌
    • 2004.08.18 20:30
    • 1 COMMENTS
    • /
    • 0 LIKES
    • srookie
      2004.08.19 01:01
      안녕하세요. 제가 보기에는 ClientSocket이 ServerSocket에 Connect 되기 전에 Send가 되었을 가능성이 있...
    • 이창우
    • 2004.08.18 20:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장철만
      2004.08.18 20:19
          DateSeparator := '.';     ShortDateFormat := 'yyy...
    • 이중철
      2004.08.19 04:43
      메인과 DLL의 Memory Heap이 틀린것으로 알고 있습니다. 즉, 메인의 어떤 포인터 변수를 가지고 DLL에서...
    • 신강섭
      2004.08.20 23:46
      음.. DLL 작성하실때 하나 주의점이 있습니다. DLL 생성시 기본적으로 생긴 주석문을 보시면 String 형을...
    • srookie
      2004.08.18 02:57
      안녕하세요. 원하시는 답변이 맞는지 모르겠습니다만, SUM에 FF를 AND 연산 하면 될것 같네요. SUM :...
    • 박태선
    • 2004.08.17 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 데빠이
      2004.08.24 19:36
      Application.ProcessMessages; 를 사용해보심이...^^ 원하시는 답변이 아니었다면 죄송하구염...