Sql script query

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Sql script query

Mesaj gönderen name »

İyi çalışmalar

Sql script nasıl çalıştıra bilirim. Yani birden fazla satırdan oluşan sql komutlarını çalıştırmak istiyorum.
Bunu yeni bir bileşen kullanmadan nasıl yaparım.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bildiğim kadarı ile bahsedeyim, IB/FB kullanıyorsanız bu tür olaylar için SET TERM komutu ile scriptteki SQL komutlarını ayırabiliyorsunuz.

Bu şekilde extra bir bileşene ihtiyaç duymadan Delphi üzerindeki TQuery nesnesi ile yapabilirsiniz.

Microsoft SQL Server için bir şey yapmanıza gerek yok kendi ayrıştırabiliyor. (İçeride bir yorumlayıcısı var ve komut bitişlerini filan kendi algılayabiliyor) Bu sebeple herhangi bir ayıraç kullanmanıza gerek kalmıyor.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Merhaba

Kuri_TLJ cevabınız için teşekkürler ama Çözemedim :oops: . Aşağıda yazdığım kod "TERM" ifadesinin tanınmadığını belirterek hata veriyor. Kullanımda mı hata yaptım anlayamadım. Bu komutu nasıl kullanacağımı belirtebilirseniz beni memnun edersiniz. İyi çalışmalar.

Kod: Tümünü seç

SET TERM ^ ;
update RDB$FIELDS set RDB$FIELD_TYPE = 10 where RDB$FIELD_NAME = 'RDB$14'
SET TERM ;^

SET TERM ^ ;
ALTER TABLE MUHTASAR ADD CHKB10 SMALLINT DEFAULT 1
SET TERM ;^
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Sorunu daha detaylı sorsaydım daha hızlı cevap alabilirdin. Yani FB/IB içinmi M$SQL içinmi vs gibi

IBX sürümünü güncelleştirmeni öneririm öncelikle şu an x.08 sürümü var (X delphi versiyonu). eski sürümlerde şu başa bela set term problemi çok vardı. Yeni sürümde bunu hallettiler. Yeni sürümleri borland'ın codecentral 'ından güncelleyebilirsin.
Set Term in amacı, ';' komut sonu olduğunu belirmek için kullanılıyor. Pascal/Delphi deki mantık. Ama bu procedure ve triger içinde problem yaratıyordu çünki StoredProcedure içinde bazı işlemler yapılması gerekiyor bu komutlarında sonuna ';' konulması gerekiyor ve buda derleme sırasında komut sonunu procedure sonu olarak algılanmasına sebep oluyordu. O yüzden bu set term komutunu koymuşlar. Bunun yaptığı iş ise geçici olarak sembolleri değiştirmek.
Yukarıdaki yazdırdığın satırlarda bende set term e gerek yok sadece sonlarına ';' koyman yeterli

Kod: Tümünü seç

update RDB$FIELDS set RDB$FIELD_TYPE = 10 where RDB$FIELD_NAME = 'RDB$14' ;
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Tavsiyeniz ile IBX 7.08'i yükledim. IBSQL bileşeni ile (IBX'in daha önceki versiyonundada bu bileşeni kullanmıştım) yine halledemedim ama yeni eklenen IBScript bileşenini kullanarak başarılı bir şekilde sorgulama yaptım. Cevabınız için çok teşekkür ederim.
Herkese iyi çalışmalar.
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Merhaba arkadaşlar aynı dertten bende müzdaribim.
Firebird kullanıyorum ve mevcut database den bir metadata olurşturdum ibexpert ile .
ibexpert tin scrip executive ile aynı database yada değişik isimlerle oluşturabiliyorum sorun yok. Ama benim yapmak istediğim olay şu anki database
data2004.gdb olarak açıldı ben bunu delphi içerisinden data2005.gdb olarak açtırmak istiyorum tabiki içerisinde bulunan bütün table,triger, generator .vs .vs.
Amatörce birkaç deneme yaptım ibquery ile ama olmadı .
Database name missing şelinde hata aldım.....
Ben delphi 6 kulanıyorum ve yukarda bahsedilen ibx 7.08 galiba delphi 7 için delphi6 için nerden bulabilirim yada bu işlemi nasıl yapabilirim.
Yardımcı olacak arkadaşlarıma işimdide teşekkür ederim.
Saygılar ..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

IBX update ini borland ın sitesinden codecentral dan yapabilirsin. Yanlış anlamadıysam sen db yide script ile create etmeye çalışıyorsun. Bunu script executer la yapamazsın. IBDatabase e path i ve dosyanın adını ver daha sonra CreateDatabase de, ozaman db yi create etmiş olursun, yanlız charset pagesize ları vermeyi unutma. Connect yerine CreateDatabase diyeceksin. Daha sonra bu db ye bağlanıp scriptlerini çalıştırabilirsin

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Sayın freeman söylediklerinizden anladığım kadarıyla

Kod: Tümünü seç

     IBDATABASE1.Params.Add('user_name=SYSDBA');
     IBDATABASE1.Params.Add('password=masterkey');
     IBDATABASE1.Params.Add('lc_ctype=WIN1254');
     IBDATABASE1.Params.add('sql_role_name=3');
     IBDATABASE1.DatabaseName := 'd:\deneme.GDB';
     IBDATABASE1.CreateDatabase;

şeklinde yaptım ama yine  olmadı 
Your user name and pasword are not defined. Mesajını alıyorum ...
Formun üzerinde sadece ibdatabase1  ve button var o kadar 
 :roll: 
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

IBDATABASE1.Params.Add('user_name=SYSDBA');
IBDATABASE1.Params.Add('password=masterkey');
IBDATABASE1.Params.Add('lc_ctype=WIN1254');
//IBDATABASE1.Params.add('sql_role_name=3');
IBDATABASE1.DatabaseName := 'd:\deneme.GDB';
IBDATABASE1.CreateDatabase; 
birde bunu dene

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Malesef değişen bişey yok yine aynı hatayı aldım.
Bişeyler eksik ama ne, sanki kod satırından verdiğimiz username ve passwordu görmğyor gibi
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

sanırım eski kodu değiştirmişler :?:
IBScript kullanarak önce db yi kendi ayarlarına göre create et, daha
sonra kullanacağın table yada Stored Procedure leri vs leri create.
Hepsini aynı script içinden halledebiliyorsun, ama tavsiyem parça parça yapman eğer hata ile karşılaşırsan müdahale etmen daha kolay olur, yoksa tüm script içinde hatayı bulman zor olabilir. IBExpert ile çıkartılan DDL i çalıştırabilirsin, deneme için ben böyle yaptım

Kod: Tümünü seç

procedure TIBDatabase.CreateDatabase;
var
  tr_handle: TISC_TR_HANDLE;
begin
  CheckInactive;
  tr_handle := nil;
  Call(
    FGDSLibrary.isc_dsql_execute_immediate(StatusVector, @FHandle, @tr_handle, 0,
                               PChar('CREATE DATABASE ''' + FDBName + ''' ' + {do not localize}
                               Params.Text), SQLDialect, nil),
    True);
end;
Params.Text i direk gönderiyor sanırım buda create işlemi için parametreler uyuşmadığı için yani USER yerine user_name gittiği için olabilir. çok fazla derinlemesine inceleyemedim. Denemk için parametreye aşağıdaki script in db create kısmını yazıp denedim, (madem parametre direk gönderiliyor diye) ilk önceleri çalıştı ama daha sonra dekrar çalışmadı yani uydurma bir çözüm olucaktı.
aşağıdaki script i FB1.5 Delphi 7 IBX 7.08 TIBScript ile test ettim

Kolay gele

Kod: Tümünü seç

SET SQL DIALECT 3;

SET NAMES WIN1254;

CREATE DATABASE 'd:\deneme.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1254;

CREATE TABLE ALL_CONSTS (
    SELF  INTEGER NOT NULL,
    ID    INTEGER NOT NULL
);

/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE ALL_CONSTS ADD CONSTRAINT PK_ALL_CONSTS PRIMARY KEY (SELF);

* Fields descriptions */

DESCRIBE FIELD ID TABLE ALL_CONSTS
'1 Cins
2 Tür
3 Model
4 Atölye
5 Durum
6 Banko
';

ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Sevgili freeman ilgine teşekkür ederim . Zahmet verrdim sizede hakkınız helal edin. Ama beceremdm birtürlü . Ben delphi6 kulanıyorum o bahsettiğiniz IBX ne menem şeyse bulamadım birtürlü.
Tekrar teşekür ederim .

Allah razı olsun.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

IBX, Component paletindeki Interbase tabındaki bileşen setinin genel adı. Bende Delphi 7 olduğu için 6 da ne var yok bilemiyorum maalesef. Ama bunun update ini yaptıysan problem olmaması lazım.

Amin Cümlemizden...
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

valla helal olsun, iyi tespit etmişsin :)
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla