버그가 있습니다 강좌란에 있는 소스인데 이걸 학습하면서 응용해 보려는데요
이상하게 원래대로 있을때는 바로 컴파일 잘되는데 제가 옮기니까 에러가 나오네요 컴파일 에러는 아니구요 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.
Database1 이 TDatabase 일경우..
Alias 를 안쓰는 설정은 TQuery 에서 TDatabase 의 설정을 사용할수없읍니다.
Database1 을 뺴버리고..
Query1.DatabaseName := ExtractFilePath(Application.ExeNmae) + 'Db';
로 바꾸고 해보세요.