Q&A

  • 소스에 버그가 있습니다 도와주세요.....
버그가 있습니다 강좌란에 있는 소스인데 이걸 학습하면서 응용해 보려는데요
이상하게 원래대로 있을때는 바로 컴파일 잘되는데 제가 옮기니까 에러가 나오네요 컴파일 에러는 아니구요 EDBE 익셉션 오류인데 오류 내용을 보면 파일 이름이 잘못된거 같아요 저는 프로그램 실행 디렉토리에 DB 디렉토리를 만들고 Tbl_Treeview.db를 넣어뒀거든요
소스 보세요 그리고 버그좀 잡아주세요 ㅠ.ㅠ

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, Menus, DB, DBTables, ExtCtrls, DBCtrls,
  Grids, DBGrids, RXDBCtrl, StdCtrls;

type
  TForm1 = class(TForm)
    RxDBGrid1: TRxDBGrid;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    StatusBar1: TStatusBar;
    TreeView1: TTreeView;
    ListView1: TListView;
    Database1: TDatabase;
    ListBox1: TListBox;
    Query1: TQuery;
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
     procedure ReadRoot;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TForm1.ToolButton6Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   Database1.Params.Append('PATH='+ExtractFilePath(Application.ExeName)+ 'Db');
   Database1.Params.Append('DEFAULT DRIVER=PARADOX');
   Database1.Params.Append('ENABLE BCD=FALSE');
   ReadRoot;
end;

procedure TForm1.ReadRoot;
var Temp_str1, Temp_str2 : string;
    itemcount, idx, i : integer;
    Root_Node, Sub_Node: TTreeNode;
begin
    ListBox1.Clear;
    TreeView1.Items.Clear;
    Root_Node:=Treeview1.Items.Add(nil,'0');
    with query1 do begin
         if Active then Close;
         SQL.Clear;
         SQL.Add('Select * from Tbl_TreeView');  // 여기서 "Tbl_TreeView.DB" 이렇게 해도 마찬가지 오류남
         Open;
         while Not Eof do begin
               Temp_str1 := FieldByName('F_Pcod').AsString;
               Temp_str2 := FieldByName('F_Scod').AsString;
               if Temp_str1 = '0' then begin
                  TreeView1.Items.AddChild(Root_Node, Temp_str2);
               end
               else begin
                  ListBox1.Items.Add(Temp_str1 + '' + Temp_str2);
               end;
               Next;
         end;
    Close;
    end;
//서브아이템등록
    idx := 0;
    itemcount := ListBox1.Items.Count;
    while ListBox1.Items.Count > 0 do begin
          Inc(idx);
          Temp_str1 := ListBox1.Items.Strings[idx-1];
          Temp_str2 := copy(Temp_str1,pos('',Temp_str1)+1,length(Temp_str1));
          Temp_str1 := copy(Temp_str1,1,pos('',Temp_str1)-1);

          Sub_Node := nil;
          for i := 0 to TreeView1.Items.Count-1 do begin
              if Temp_str1 = TreeView1.Items.Item[i].Text then begin
                 Sub_Node := TreeView1.Items.Item[i];
                 break;
              end;
          end;
          if Sub_Node <> nil then begin
             if TreeView1.Items.AddChild(Sub_Node,Temp_str2) <> nil then begin
                ListBox1.Items.Delete(idx-1);
                Dec(idx);
             end;
          end;
          if ListBox1.Items.Count <= idx then begin
             if itemcount = ListBox1.Items.Count then break;
             itemcount := ListBox1.Items.Count;
             idx := 0;
          end;
    end;
end;

end.
3  COMMENTS
  • Profile
    Cos Consulting 2002.02.13 13:47

    Database1 이 TDatabase 일경우..
    Alias 를 안쓰는 설정은 TQuery 에서 TDatabase 의 설정을 사용할수없읍니다.

    Database1 을 뺴버리고..
    Query1.DatabaseName := ExtractFilePath(Application.ExeNmae) + 'Db';
    로 바꾸고 해보세요.

  • Profile
    델파이 초보 2002.02.13 16:00
    답변 감사합니다 하지만 안되네요 ^^;
  • Profile
    Cos Consulting 2002.02.15 15:42
    프로젝트 옵션에서 Output directory 를
    지정하지 않으면 델파이에서 Project Run 시에
    application.exename 의 FilePath 는
    Default Project 디렉토리가 됩니다.
    ShowMessage(Application.ExeName) 을 넣어서 확인해보시길.
    아마도 디렉토리가 틀려서 그럴겁니다.
    • Cos Consulting
      2002.02.13 13:29
      텍스트파일 엑세스는 여러방법이 있겠지만.. 가장 쉬운방법은... TStringList 를 이용하는겁니다... ...
    • 강환춘
      2002.02.15 09:51
      답변 정말 고맙습니다. 그런데 읽기 할때요 만약에 첫재줄에 11120 이라고 둘째줄에 11290 이라고 있을...
    • Cos Consulting
      2002.02.15 15:44
      숙제하고 계십니까 ? -_- 답은..당연히 가능합니다. Input text file 이 Fixed length 면 copy 루틴으...
    • 강환춘
      2002.02.15 18:54
      네 ^^ 숙제 하고 있습니다... 답변 해주신것 감사드립니다.
    • 박정훈
    • 2002.02.12 20:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황선웅
      2002.02.14 17:52
      혹시 user table에 user를 추가 하실때 host필드란에 '%'로 입력하셨는지요...... 위의 값은 모든 호스트...
    • Cos Consulting
      2002.02.13 13:47
      Database1 이 TDatabase 일경우.. Alias 를 안쓰는 설정은 TQuery 에서 TDatabase 의 설정을 사용할수...
    • 델파이 초보
      2002.02.13 16:00
      답변 감사합니다 하지만 안되네요 ^^;
    • Cos Consulting
      2002.02.15 15:42
      프로젝트 옵션에서 Output directory 를 지정하지 않으면 델파이에서 Project Run 시에 application.exen...
    • Coolguy
    • 2002.02.12 15:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Cos Consulting
      2002.02.12 19:09
      Process 가 폼어베잇할시간이 없이.. 반복계산에만 집중돼서 그래요... application.processmessages ...
    • 정성훈
    • 2002.02.12 10:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이병훈
      2002.02.13 05:02
      안녕하세요. ^^ 훔. 서브쿼리를 사용하시면 될것 같은데요. select * from aaa where kk in (selec...
    • 원동희
    • 2002.02.12 10:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.12 19:43
      이렇게 해보시는게 어떨지.....^^ Query1.ExecSQL;   --> Query1.Open;
    • 이준희
      2002.02.13 23:32
      uses math;    // 요기에 파이가 3.141592 procedure TForm1.Button1Click(Sende...
    • 정성훈
    • 2002.02.12 01:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.12 03:03
      음... 정확하게 무엇과 무엇이 조인되는 건지는잘 모르겠습니다만... ANSI문법상 조인되는 문법은 다음...
    • 정성훈
    • 2002.02.11 22:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.15 00:46
      도움말에 그와 비슷한 부분이 있어서 올려드립니다 원하시는 답변이 아닐지라도 참고하시면 도움이 되리...
    • 김현희
    • 2002.02.10 01:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.10 01:51
      음....저의 다순한 생각도 델파이 버젼이 맞지않아서 그런것 같군요.. 저확한 답변이 아니고 추측하는...
    • 박성훈
    • 2002.02.10 01:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • gudwhrla
      2002.02.11 20:33
      New -> Project 탭을선택하고 상속받을 폼을 선택하고 확인을 누르면 똑같은 자식폼이 생깁니다. Inhe...
    • 정두진
    • 2002.02.10 00:53
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 황보창
    • 2002.02.09 22:21
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김상호
    • 2002.02.09 22:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.10 10:01
      음... 좀 어렵네요... 원하시는 방법은 아닙니다만.. 이방법은 어떨지 몰겠군요... 다음과 같이 하시...
    • 김상조
    • 2002.02.09 20:57
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 허일학
      2002.02.10 01:32
      날짜 계산함수입니다.... function DateAdd(interval:TDateAdd_interval; Number:integer; DateTime:T...
    • Tk
      2002.02.09 23:55
      그냥 엘셀 파일메뉴보면 다른이름으로 저장 에서 dbf 파일루 저장하세요 ^^; 그담엔 sql 쭈쭉 하시면 ...
    • 황선웅
      2002.02.09 22:59
      ADO 콤포를 쓰시면 안되는건가요? 엑셀 화일 불러들여서 루프를 돌리던가 하셔서 각각의 원하시는 테이...
    • sjHwang
    • 2002.02.09 18:54
    • 0 COMMENTS
    • /
    • 0 LIKES
    • blackjewel
      2002.02.16 10:59
      이런 방법은 어떨런지... 제가 여러개의 filter 줄때 사용하는 방법인데여.. cFiltGetChe, cFiltCode1....
    • 김정선
      2002.02.10 23:25
      CheckBox 를 쓰시면 될거 같습니다. 각 종류별 체크박스를 만든 후 체크박스를 선택된것만 Filter 에 넣...
    • 황선웅
      2002.02.09 22:50
      Filter는 String 값을 받습니니다. 그러니까 각 조건일때 String변수를 정의해서 대입한후 그변수를 Ta...