Tarih udfsinde hata

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
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Tarih udfsinde hata

Mesaj gönderen Fatih! »

ş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'
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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 :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

dediğiniz dll yada ona benzer bir dosyaya rastlayamadım. benimde ilk o aklıma gelmişti :roll:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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 »

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.
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

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 :roll:
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 »

Kodun son halini gösterebilir misin.

Bir de derlediğinde ne hatası veriyor.

(Değişiklikleri yaptıktan sonraki halşinden bahsediyorum)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

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
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

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
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,

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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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!!
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

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 :oops:
Cevapla