FireBird vt. de Script halindeki SQL cümleciğini çalıştırma

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

FireBird vt. de Script halindeki SQL cümleciğini çalıştırma

Mesaj gönderen Nemesis2005 »

SQL Serverde bir kaç tablonun create cümleciğini bir text dosyadan okutup tek queryde çalıştırabiliyordum. Ama FireBird te bunu beceremedim sql cümleciğini çalıştırmaya kalktığın anda ikici tablo nun create cümleciğinin başladığı yerde hata veriyor. Acaba FireBirdde bunu nasıl yapabilirim
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
assoft

Mesaj gönderen assoft »

Sanırım biraz daha açıklayacı olmanız lazım çünkü hiçbir kod görünmüyor bunun için önce SQL server ile nasıl yaptınız firebird'te nasıl yapmak istiyorsunuz ve bunun akabinde aldığınız hatanın tamamını yazman gerekiyor. Birde tamam emin olmamkla beraber sanırım ihtiyacınız olan komut SET TERM komutu olmalı biraz araştırma yaparsınız forumda muhakkak izlerine rastlarsınız.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

IB Script bileşenine bir bak.
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

Mesaj gönderen Nemesis2005 »

Yapmaya çalıştığım şöyle birşey

Kod: Tümünü seç

Create Table Caribilgi(....
....
....
....
....
)

Create carihareket(..........
....
....
....
....
....
....
)
gibi cümleleri tek bir text file içine kaydetmek ve Query nin
query1.LoadFromFile(c:\test.txt) özelliği ile yükleyip
ExecSQL ile çalıştırmak. FireBird te bunu nasıl yaparım.

Mustafa hocam bu IB Script component'ini nereden bulabilirim. acaba Delphi 7 kullanıyorum ama bu component'i bulamadım
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ibx update edersen bu bilesenler geliyor.delphi 7 icin versiyonu 7.04 yada 7.08 olmalı
ÜŞENME,ERTELEME,VAZGEÇME
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
Tam emin değilim ama geçenlerde böyle birşeyle karşılaştığımda sanırım araya "Commit" komutunu koyarak çözmüştüm, bi deneyin..
Kolay gelsin.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
bir tablonun create cümlesi bittikten sonra sonuna " ; " noktalı virgül koyman gerekir.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

Mesaj gönderen Nemesis2005 »

vkamadan dediğin IB Expert için doğru ama Query içinde ';' ile ayırsan bile yinede hata veriyor
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

IBQuery ile olmaz arkadasım
ibscript diye bir bilesen var bu gibi isler icin
ÜŞENME,ERTELEME,VAZGEÇME
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,
gkimirti'nin dediği gibi ibScript bileşenini kullanabilirsin ya da kendin SQL Script içindeki komutları ayırarak IBQuery ile bir döngü içinde ayrı ayrı çalıştırabilirsin.

Örnek:

Kod: Tümünü seç

function IBSQLExec(FileName: string; IBSql: TIBQuery): Boolean;
const
  SetTerm = 'SET TERM';
var
  S, SQuery: string;
  Separator: string;
begin
  Result:= True;
  Separator:= ';';
  try
    S:= Trim(FileToStr(FileName));
    if (Pos(Separator, S) = 0) then
      S:= S + Separator;
    while (Length(S) > 1) do
    begin
      Application.ProcessMessages;
      SQuery:= Copy(S, 1, Pos(Separator, S) - 1);
      SQuery:= NoTerm(SQuery);
      S:= Trim(Copy(S, Pos(Separator, S) + Length(Separator), Length(S) - Pos(Separator, S) + Length(Separator)));
      S:= NoTerm(S);
      if Pos(SetTerm, UpperCase(SQuery)) > 0 then
      begin
        Separator:= Trim(Copy(SQuery, Pos(SetTerm, UpperCase(SQuery)) + Length(SetTerm), Length(SQuery) - Pos(SetTerm, UpperCase(SQuery)) + Length(SetTerm)));
        SQuery:= Trim(Copy(SQuery, 1, Pos(SetTerm, UpperCase(SQuery)) - 1));
      end;
      if Length(SQuery) > 0 then
      begin
        if IBSql.Active then
          IBSql.Close;
        IBSql.ParamCheck:= False;
        IBSql.SQL.Clear;
        IBSql.SQL.Text:= SQuery;
        try
          IBSql.ExecSQL;
          IBSql.Transaction.Commit;
        except
          IBSql.Transaction.Rollback;
          Result:= False;
        end;
      end;
      if not (Pos(Separator, S) > 0) then
        Break;
    end;
  except
    Result:= False;
    Exit;
  end;
end;

function FileToStr(FileName: string): string;
var
  FileStream: TFileStream;
begin
  Result:= '';
  if FileExists(FileName) then
  begin
    FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
      SetLength(Result, FileStream.Size);
      FileStream.ReadBuffer(Pointer(Result)^, FileStream.Size);
    finally
      FileStream.Free;
    end;
  end;
end;
Cevapla