Q&A

  • 제가 View을 만들어는데... View 존재 여부를 어떻게 해야 하는지 알고 싶습니다.
안녕하세요.
수고 많습니다.

DelPhi 4.0, Ms-Sql 7.0

제가 View을 만들었습니다.
View가 잘 됩니다.

그런데 문제는 View가 존재 하는지를 어떻게 알수 있는지를 알고 싶습니다.
그래서 어떤책을 보니 SQL Serve Query Analyzer에 작성을 해서 테스트를
하라고 해서 해보아 습니다. 되게 잘됩니다.
1:
************************************************************
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
           WHERE TABLE_NAME ='ORDERNO')
   DROP VIEW ORDERNO
GO
Create View dbo.OrderNo (invoice, aCode1,aSize1,aColor1,aQty1,
                                      proforma, bCode1,bSize1,bColor1,bQty1)
as

select

a.Bill_No,a.matr_Code,a.Matr_Size,a.Matr_Color,a.Matr_qty, b.Bill_No, b.matr_Code,b.Matr_Size,b.Matr_Color,b.matr_qty

From dbo.Invoice a, dbo.Corder b

where a.Matr_Code =b.Matr_Code
  
WITH CHECK OPTION
    
제가 원하는 내용은 이것이 입니다.
존재하며 지우고  존재하지 않으며 새로 만들고.....
************************************************************

2:
____________________________________________________________
select * From Information_Schema.tables
Where Table_Name =''OrderNo'
___________________________________________________________

3:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
select * From sysObjects
Where Type =''V'' and ID = OBJECT_ID("Dbo.view Name")
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

그런데 문제는 이것을 DelPhi에서는 어떻게 작성을 해야 합니까?

그래서 1번을 아래와 같이 작성을 하였습니다.
검토를 해보시고 좋은 방법이 있는지 알려 주시길 바랍니다.

그리고 SQL Serve Query Analyzer에서 작성한것을 저장 했습니다
이것을 어떻게 이용할 수 없을까요?

트리거, 프로시저처럼 아래와 같이 작성하지 않고 바로 사용하는 방법은 없을 까요? 1번 처럼.....


with Query4 do
     begin
     Close;
     Sql.Clear;
     Sql.Add('select * From Information_Schema.Views ');
     Sql.Add(' Where Table_Name =:p1                          ');
     paramByName('p1').asstring:='OrderNo';
     open;
     str1:=FieldByName('Table_Name').asstring;//str1에 값이 있습니다.
     //if FileExists(FieldByName('Table_Name').asstring) then//이부분에서는 값이 존재를 하지 않는것 같습니다. 제가 잘못 표현 했는지....
    
     if (str1 = 'OrderNo') then//그래서 이렇게 표현을 했습니다.
        begin
        with Query5 do
             begin
             Close;
             Sql.Clear;
             Sql.Add('drop view Orderno ');
             ExecSql;
             Close;
             end;
        end;
     Close;
     end;

with Query5 do//view생성
     begin
     Close;
     Sql.Clear;
     Sql.Add('Create View dbo.OrderNo (invoice, aCode1,aSize1,aColor1,aQty1, proforma, bCode1,bSize1,bColor1,bQty1) as  ');
     Sql.Add('select a.Bill_No,a.matr_Code,a.Matr_Size,a.Matr_Color,a.Matr_qty, b.Bill_No, b.matr_Code,b.Matr_Size,b.Matr_Color,b.matr_qty From dbo.Invoice a, dbo.Corder b   ');
     Sql.Add('where a.Matr_Code =b.Matr_Code                      ');
     //Sql.Add('Order By a.Matr_Code, a.Matr_Size, a.Matr_Color     ');
     //Sql.Add('where a.Matr_Code = b.Matr_Code  and a.Matr_Code =''.ATW''                      ');
     ExecSql;
     end;
with Query6 do//data search
     begin
     Close;
     Sql.Clear;
     Sql.Add('select * from OrderNo ');
     Open;i1:=0;
     kg6.ZapGrid(1,0,5000 + 2);
     with kg6 do
     while not eof do
           begin
           i1:=i1 + 1;
           SCells[0, i1]:=FieldByName('invoice' ).asstring;
           SCells[1, i1]:=FieldByName('aCode1'  ).asstring;
           SCells[2, i1]:=FieldByName('aSize1'  ).asstring;
           SCells[3, i1]:=FieldByName('aColor1' ).asstring;
           NCells[4, i1]:=FieldByName('aQty1'   ).asFloat;
           SCells[5, i1]:=FieldByName('proforma').asstring;
           SCells[6, i1]:=FieldByName('bcode1'  ).asstring;
           SCells[7, i1]:=FieldByName('bSize1'  ).asstring;
           SCells[8, i1]:=FieldByName('bColor1' ).asstring;
           NCells[9, i1]:=FieldByName('bQty1'   ).asFloat;
           if (i1 > 5000) then
              exit;
           Next;
           end;
     Close;
     end;

많은 답변을 부탁 드립니다.
감사합니다.
그럼 수고 하세요



2  COMMENTS
  • Profile
    Galaxy 2003.10.30 00:26
    수고 많습니다.
    만약에 체크해서 있으면 Drop하고 없으며 새로 만들고 하면
    부하가 많이 걸리지 않을 까요
    원하는 데이타 항상 바뀌는데 수정하고 새로 만들고 이러면 부하가 많이 걸리지 않을까요
    궁금해서 질문 합니다.
    그럼 수고 하세요
  • Profile
    Galaxy 2003.10.30 00:37
    죄송합니다.
    한번에 질문을 못해서...

    만약에 말 입니다.
    제혼자 프로그램을 사용을 하면 상관은 없지만
    여러 client 들이 프로그램을 사용하게되는데
    제가 작업 도주에 view을 생성을 하였습니다.
    다른 사람 입장에서는 view가 존재하기 때문에 삭제를하고 새로생성을 하게될텐데 그러면 제가 만든 view는 삭제가 됩니까??? 어떻게 되는지 궁금합니다.
    여러사람이 동시에 발생하며 어떻게 됩니까???

    죄송합니다.
    그럼 수고 하세요