Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Fatih!
Kıdemli Üye
Mesajlar: 1172 Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:
Mesaj
gönderen Fatih! » 02 Mar 2005 02:34
şu Adresten faydalanarak udf yapmayı öğreniyorum. tarih udfsine kadar hepsini hallettim ama tarihi bi türlü çözemedim.
http://www.ibphoenix.com/a590.htm?a=ibp ... troduction
unit kodu
Kod: Tümünü seç
unit Unit1;
interface
uses
SysUtils,ib_util;
type
TM = record
tm_sec : integer; // Seconds
tm_min : integer; // Minutes
tm_hour : integer; // Hour (0--23)
tm_mday : integer; // Day of month (1--31)
tm_mon : integer; // Month (0--11)
tm_year : integer; // Year (calendar year minus 1900)
tm_wday : integer; // Weekday (0--6) Sunday = 0)
tm_yday : integer; // Day of year (0--365)
tm_isdst : integer; // 0 if daylight savings time is not in effect
end;
PTM = ^TM;
ISC_TIMESTAMP = record
timestamp_date : Long;
timestamp_time : ULong;
end;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;
function Year(var ib_date: Long): Integer; cdecl; export;
function Hour(var ib_time: ULong): Integer; cdecl; export;
implementation
procedure isc_encode_timestamp (tm_date: PTM; ib_date: PISC_TIMESTAMP); stdcall; external IBASE_DLL;
procedure isc_decode_timestamp (ib_date: PISC_TIMESTAMP; tm_date: PTM); stdcall; external IBASE_DLL;
procedure isc_decode_sql_date (var ib_date: Long; tm_date: PTM); stdcall; external IBASE_DLL;
procedure isc_encode_sql_date (tm_date: PTM; var ib_date: Long); stdcall; external IBASE_DLL;
procedure isc_decode_sql_time (var ib_date: ULong; tm_date: PTM); stdcall; external IBASE_DLL;
procedure isc_encode_sql_time (tm_date: PTM; var ib_date: ULong); stdcall; external IBASE_DLL;
function Year(var ib_date: Long): Integer;
var
tm_date: TM;
begin
isc_decode_sql_date(@ib_date, @tm_date);
result := tm_date.tm_year + 1900;
end;
function Hour(var ib_time: ULong): Integer;
var
tm_date: TM;
begin
isc_decode_sql_time(@ib_time, @tm_date);
result := tm_date.tm_hour;
end;
end.
verdiği hatalar
Kod: Tümünü seç
[Error] Unit1.pas(18): Undeclared identifier: 'Long'
[Error] Unit1.pas(19): Undeclared identifier: 'ULong'
[Error] Unit1.pas(24): Undeclared identifier: 'IBASE_DLL'
[Error] Unit1.pas(32): Types of actual and formal var parameters must be identical
[Error] Unit1.pas(37): Types of actual and formal var parameters must be identical
[Fatal Error] UDF_TOPLA.dpr(4): Could not compile used unit 'Unit1.pas'
rsimsek
Admin
Mesajlar: 4482 Kayıt: 10 Haz 2003 01:48
Konum: İstanbul
Mesaj
gönderen rsimsek » 02 Mar 2005 03:02
long yerine longint olacak ulong u da tanımıyor, ona da longint diyebilirsin. zaten timestamp alanı double bir alandır. tam sayı kısmı tarihi noktadan sonraki kısmı saatı verir. ayrıca IBASE_DLL.dll yi de bulamadığını söylüyor. fb / ib için yazıyorsan udf klasörü altına koyman gerekiyordu yanlış hatırlamıyorsam
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Fatih!
Kıdemli Üye
Mesajlar: 1172 Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:
Mesaj
gönderen Fatih! » 02 Mar 2005 03:17
dediğiniz dll yada ona benzer bir dosyaya rastlayamadım. benimde ilk o aklıma gelmişti
rsimsek
Admin
Mesajlar: 4482 Kayıt: 10 Haz 2003 01:48
Konum: İstanbul
Mesaj
gönderen rsimsek » 02 Mar 2005 03:20
procedure isc_encode_timestamp (tm_date: PTM; ib_date: PISC_TIMESTAMP); stdcall; external IBASE_DLL;
demekle zaten
isc_encode_timestamp proceduru nun IBASE_DLL dll inin içinde olduğunu belirtiyorsunuz.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
fduman
Moderator
Mesajlar: 2749 Kayıt: 17 Ara 2004 12:02
Konum: Ankara
Mesaj
gönderen fduman » 02 Mar 2005 03:31
bir de IBASE_DLL tek tırnak içinde olacak 'IBASE_DLL' gibi.
IBASE_DLL dediği Interbase/FB client dll'i. oraya 'gds32.dll' yazman gerekecek. Firebird için 'FBCLIENT.DLL' yazarsan da olur.
Fatih!
Kıdemli Üye
Mesajlar: 1172 Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:
Mesaj
gönderen Fatih! » 02 Mar 2005 04:55
hocam dediğinizi yaptım library pathada gösterdim sırayla iki dllyide denedim olmadı.
long ulongu ve
Kod: Tümünü seç
[Error] Unit1.pas(39): Undeclared identifier: 'isc_decode_sql_date'
hatayı veriyor..
long ve ulngu longint yaptım bu seferde fonksiyonun ilk satırında
Kod: Tümünü seç
[Error] Unit1.pas(51): Types of actual and formal var parameters must be identical
diyor
kafayı yicem yaff
Kuri_YJ
Moderator
Mesajlar: 2248 Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:
Mesaj
gönderen Kuri_YJ » 02 Mar 2005 05:46
Kodun son halini gösterebilir misin.
Bir de derlediğinde ne hatası veriyor.
(Değişiklikleri yaptıktan sonraki halşinden bahsediyorum)
Fatih!
Kıdemli Üye
Mesajlar: 1172 Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:
Mesaj
gönderen Fatih! » 02 Mar 2005 06:32
Kod: Tümünü seç
unit Unit1;
interface
uses
SysUtils,ib_util;
type
TM = record
tm_sec : integer; // Seconds
tm_min : integer; // Minutes
tm_hour : integer; // Hour (0--23)
tm_mday : integer; // Day of month (1--31)
tm_mon : integer; // Month (0--11)
tm_year : integer; // Year (calendar year minus 1900)
tm_wday : integer; // Weekday (0--6) Sunday = 0)
tm_yday : integer; // Day of year (0--365)
tm_isdst : integer; // 0 if daylight savings time is not in effect
end;
PTM = ^TM;
ISC_TIMESTAMP = record
timestamp_date : Longint;
timestamp_time : Longint;
end;
PISC_TIMESTAMP = ^ISC_TIMESTAMP;
function Year(var ib_date: Longint): Integer; cdecl; export;
function Hour(var ib_time: Longint): Integer; cdecl; export;
implementation
procedure isc_encode_timestamp (tm_date: PTM; ib_date: PISC_TIMESTAMP); stdcall; external 'gds32.dll';
procedure isc_decode_timestamp (ib_date: PISC_TIMESTAMP; tm_date: PTM); stdcall; external 'gds32.dll';
procedure isc_decode_sql_date (var ib_date: Longint; tm_date: PTM); stdcall; external 'gds32.dll';
procedure isc_encode_sql_date (tm_date: PTM; var ib_date: Longint); stdcall; external 'gds32.dll';
procedure isc_decode_sql_time (var ib_date: Longint; tm_date: PTM); stdcall; external 'gds32.dll';
procedure isc_encode_sql_time (tm_date: PTM; var ib_date: Longint); stdcall; external 'gds32.dll';
function Year(var ib_date: Longint): Integer;
var
tm_date: TM;
begin
isc_decode_sql_date(@ib_date, @tm_date);
result := tm_date.tm_year + 1900;
end;
function Hour(var ib_time: Longint): Integer;
var
tm_date: TM;
begin
isc_decode_sql_time(@ib_time, @tm_date);
result := tm_date.tm_hour;
end;
end.
hatalar
[Error] Unit1.pas(51): Types of actual and formal var parameters must be identical
[Error] Unit1.pas(59): Types of actual and formal var parameters must be identical
kursör fonksiyonun isc_decode_sql_date(@ib_date, burasında duruyor
gkimirti
Admin
Mesajlar: 1956 Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul
Mesaj
gönderen gkimirti » 03 Mar 2005 08:22
hocam gds32 deki bu fonksiyonları neden kullanmak istiyorsunuz ki
delphidekiler yeterli degil mi?
zaten bir dll yazıyorsunuz
dll icinden dll func cagırmaya ne luzum varki
Delphinin kendi datetime rutinleri yeter aslında
aynı zamanda rfunc lib icinde bir udf yazmaya gerek kalmayacak kadar func var
ÜŞENME ,ERTELEME ,VAZGEÇME
Kuri_YJ
Moderator
Mesajlar: 2248 Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:
Mesaj
gönderen Kuri_YJ » 03 Mar 2005 08:24
Selamlar,
TM diye tanımladığınız şey bir Record Tip, buna kızıyor sanırım. Onun yerine oraya daha basit tipli bir veri koyun derleyin bakalım sorun bu mu? (muhtemel budur).
Kolay Gelsin
rsimsek
Admin
Mesajlar: 4482 Kayıt: 10 Haz 2003 01:48
Konum: İstanbul
Mesaj
gönderen rsimsek » 03 Mar 2005 09:16
Her iki fonksiyondaki TM ler
var
tm_date: TM;..
procedure isc_decode_sql_time (var ib_date: Longint; tm_date: PTM); stdcall; external 'gds32.dll';
deki gibi PTM olacak.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Fatih!
Kıdemli Üye
Mesajlar: 1172 Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:
Mesaj
gönderen Fatih! » 04 Mar 2005 03:24
gkimirti yazdı: hocam gds32 deki bu fonksiyonları neden kullanmak istiyorsunuz ki
delphidekiler yeterli degil mi?
zaten bir dll yazıyorsunuz
dll icinden dll func cagırmaya ne luzum varki
Delphinin kendi datetime rutinleri yeter aslında
aynı zamanda rfunc lib icinde bir udf yazmaya gerek kalmayacak kadar func var
halısın hocam ama konunun her bölümünü çözmek istemiştim