Aklima gelen en az iki yontem var:
1)
Visual Fox Pro
** Sadece bir kere yapiliyor
Create Table enumerator (lastUsed i Autoinc, uniqueID c(36))
Index On uniqueID Tag uniqueID
** Sadece bir kere yapiliyor
** Her yilbasinda 'zap'
Local A_BIOPSINO
A_BIOPSINO = Ltrim(Str(Year(Date())) + Padl(GetNextID(),5,'0')
Insert Into 'Biopsi' ;
(BiopsiNo, Ad, Soyad) ;
values ;
(m.A_BIOPSINO, m.Ad, m.Soyad)
*** Destek prosedurleri
*** Aslinda bu ikisi GetNextID.prg de olsa en kolayi olur.
*** Yil buraya da konabilirdi.
Procedure GetNextID
Local lcGuid
Local Array laID[1]
lcGuid = GetGuid()
Insert Into enumerator (uniqueID) Values (m.lcGuid)
Select lastUsed From enumerator ;
Where uniqueID = m.lcGuid ;
Into Array laID
Return laID
Endproc
Procedure GetGuid
Local pGUID,rGUID
Declare Integer UuidCreate In 'RPCRT4.dll' String @pguid
Declare Integer StringFromGUID2 In 'Ole32.dll' ;
string rguid, String @lpsz, Integer cchMax
pGUID=Replicate(Chr(0),16)
rGUID=Replicate(Chr(0),80)
UuidCreate(@m.pGUID)
StringFromGUID2(m.pGUID,@m.rGUID,40)
Return Chrtran(Strconv(Left(m.rGUID,76),6),'{}','')
Endproc
2) Bu yontemde dogrudan dogruya biopsiNo database seviyesinde yaratiliyor (kayit eklendiginde otomatik biopsiNo)
Visual Fox Pro
CREATE DATABASE biopsi
Create table biopsi (biopsiID i AUTOINC NEXTVALUE YEAR(DATE())*10000+1, ;
biopsino c(9) DEFAULT LTRIM(STR(biopsiID)), ;
ad c(15), soyad c(15))
Index On biopsiID Tag biopsiID
INDEX on biopsino TAG biopsiNo
INDEX on UPPER(ad) TAG ad
INDEX on UPPER(soyad) TAG soyad
INDEX on UPPER(soyad+ad) TAG isim
BiopsiNo neden karakter o ayri mesele:)
Bu sekilde yaparsan yeni yilda bir kez bunu yapman lazim (numarator sifirlama):
Visual Fox Pro
use biopsi exclusive
DELETE TAG all
ALTER table biopsi ;
alter COLUMN biopsiID i AUTOINC NEXTVALUE (YEAR(DATE())+1)*10000+1 ;
alter COLUMN biopsino c(9) DEFAULT LTRIM(STR(biopsiID))
Index On biopsiID Tag biopsiID
INDEX on biopsino TAG biopsiNo
INDEX on UPPER(ad) TAG ad
INDEX on UPPER(soyad) TAG soyad
INDEX on UPPER(soyad+ad) TAG isim
use
O bir suru tag'i ornek diye koydum.
Ortada lock filan yok (otomatik lock disinda), Flush ben hayatimda kullanmadim.
Bu arada Izmir'de nerdesin? Soylemissindir de ben artik yasliyim:) Inciralti'na yolun duserse, sahil yolundan Turkuaz'a gelmeden Deniz Bil. ve Tek. Enstitusu var. Ugra:)
Ikincisi icin insert ornegini unuttum:
Visual Fox Pro
INSERT INTO biopsi (ad, soyad) VALUES ('X','Y')
bunda problem, biopsiNo lazimsa, insert sonrasi alman lazim:
Visual Fox Pro
INSERT INTO biopsi (ad, soyad) VALUES ('X','Y')
biopsiNo = biopsi.BiopsiNo