1

Konu: Append blank

Merhaba
Bu ilk defa başıma geliyor. Çok kullanıcılı bir sistemde program gayet düzgün şekilde APPEND BLANK yaparak devam edereken bir süre sonra ÖRNEĞİN yüzücü kayıttan sonra append blank yapmadan eski satırın üzerine yazmaya başlıyor. Programdan çıkıp tekrar girince düzeliyor.

Set Multilocks On 
Set Reprocess To Auto

durumunda. her append blank ve replace den sonra dosyayı açıp kapamıyorum. zaten select ile seçilmiş durumda.
Ne hata yapıyorum. Değerli fikirlerinizi rica ederim.

2

Re: Append blank

Cok kullanicili sistemde beklenen sey. Nedeni de append blank'in kaydi kilitlememesi. Append blank yerine insert into kullan.

3

Re: Append blank

nasıl yani? nasıl eski kaydın üzerine yazıyor?

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

4

Re: Append blank

Baya yaziyor. Anlasilmayan yanini anlamadim. Append blank kaydi lilitlemez, Append Blank ile replace iki ayri komut. Ikisi arasinda baska komut da olabilir zaman farki da. Bu da yeteri kadar hataya yol aciyor. Sadece gorulmesi ne kadar yogun kullanim olduguna bagli. Insert into varken append blank son derece gereksiz bir komut ve eskiden kalma.

5

Re: Append blank

şimdi, append blank yaptığında eğer table buffered ise gerçekte kayıt eklemiyor. tableupdate yapınca ekleyip kaydediyor. o zaman nasıl append blank ile mevcut kayıtların üzerine kayıt yapılıyor anlamadım.

"ayıttan sonra append blank yapmadan eski satırın üzerine yazmaya başlıyor."

ben "append blank yapıyorum ve buna rağmen boş kayıt eklemiyor, eski bir kaydın üzerine yazıyor" anladım. bunu anlayamadım. böyle birşey var mı? varsa nasıl oluyor?

ben bazı programlarımda silinmiş kayıtları tekrar kullanıyorum. bunu da bir procedure ile yapıyorum. eğer silinmiş kayıt bulursa recall yapıyor, bulamazsa append blank yapıyor. bunu bu yüzden sordum.

yani append blank
arkasından replace
ve tableupdate bir probleme yol açar mı? yol açarsa yine append blank ile bunun engellemenin yolu var mı?

ayrıca foxpro dos'ta da aynı problem olabiliyor mu?

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

6

Re: Append blank

Bilemiyorum:) Ben Append Blank kullanmayali yillar gecti. Cok kolay hataya acik (ne bileyim arada bir timer vardir, refresh ediyordur, tam child tabloya append blank yaptigim ana denk gelir. Ben append blank ile actigim kaydi yazdigimi dusunurken baska kayitta replace ediyor olurum). Nesne tabanli ortamda "append blank" bana "public" kadar tehlikeli gorunuyor.  Insert Into varken neden kullanmaya ihtiyacim olsun ki diye de dusunuyorum.

7 Son düzenleyen, metin (17.01.2011 17:40:03)

Re: Append blank

neyse bilmediğim başka bir tehlike yokmuş.
en güzeli sql server kullanmak ya. bir sürü sql server'a çeviremediğimiz kod var. sql server en güvenlisi. öyle lock filan gibi şeylerle de uğraşmıyorsun. bir programımda unlock koymayı unutmuşum bir yere kafayı yiyecektim. kullanıcılardan biri bütün sistemi lock ediyordu. kimin yaptığını da farkedemiyorlardı. kitlenme kalkana kadar herkes programdan çıkıyordu. ne zor bulmuştum.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

8

Re: Append blank

Çok teşekkür ederim üstadım. insert into kullanmak şart oldu. Aslında ilginç olan bunu neden ve ne zaman yapacağının belli olmaması. Test amacıyla sadece tek user'e kayıt girdirdiğim zaman bile arasıra bunu yapıyor. Hatta ve hatta bu sırada diğer user'lar okumak için bile tableyi açmamış oluyorlar. Ama 3 user aynı anda giriş yaparken 300-400 kayıtta bile bu hatayı yapmayabiliyor. Yukarıda yazılı olduğu üzere append blankın hemen ardından başka komut vermeden hemen "replace..." lere başlasam bile sonuç değişmiyor.
Yazdıklarından anladığın kadarı ile insert into da bu durum hiç olmayacak gibi görülüyor.
İlginçtır, ne zaman insert into duysam geçen sene istanbuldaki seminerde ekrana yazdığın o up uzun satır geliyoe aklıma. big_smile

9 Son düzenleyen, ugurlu2001 (18.01.2011 09:33:29)

Re: Append blank

Gökçe abi, illa uzun satır olmasına gerek yok ..

Visual Fox Pro
Select * From MyTable Into cursor CrsTemp ReadWrite 

 
Insert Into CrsTemp Select * From MyTable

( Tablo ve field yapısı aynı ise sadece Select - Insert ile işi tamamlayabiliyorsun. )

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

10

Re: Append blank

Merhaba,

Bir noktayı sormak istiyorum. Çok kullanıcılı bir ortamda bir programım var. Orada yeni kayıt eklenirken var olan en büyük BIOPSINO'ya 1 eklenmesi gerekiyor. BIOPSINO alanı karakter türünde ("201100012" nolu kayıt varsa "201100013" no oluşturulmalı). Aynı anda birden fazla kullanıcının yeni kayıt ekleyebileceğini düşünerek şöyle bir kod oluşturmuştum:

Visual Fox Pro
USE BIOPSI

SET ORDER TO BIOPSINO
FLOCK()  && Yeni kayıt eklenecek - Tüm dosya kilitleniyor.
APPEND BLANK
REPLACE BIOPSINO WITH m.A_BIOPSINO
FLUSH FORCE
m.NEREDE = RECNO()
DO WHILE .T.
    SEEK A_BIOPSINO
    IF RECNO()=m.NEREDE
        EXIT
    ENDIF
    IF .NOT. EOF()
         m.YIL=LEFT(m.A_BIOPSINO,4)
           m.EKLE= ALLTRIM(STR(VAL(RIGHT(A_BIOPSINO,5))+1))
           m.A_BIOPSINO=m.YIL + REPLICATE("0",5-LEN(m.EKLE)) + m.EKLE
     ELSE
        GO m.NEREDE
        REPLACE BIOPSINO WITH m.A_BIOPSINO
        FLUSH FORCE
        EXIT
    ENDIF
ENDDO
RLOCK()  &&tün dosyayı kilitlemeye gerek yok artık, bu kaydı kilitle yeter
REPLACE AD WITH m.A_AD, SOYAD WITH...


Burada APPEND BLANK yerine INSERT INTO'yu nasıl koyabilirim.

Teşekkürler

11

Re: Append blank

Visual Fox Pro
USE BIOPSI

SET ORDER TO BIOPSINO
FLOCK()  && Yeni kayıt eklenecek - Tüm dosya kilitleniyor.
insert into biopsi (biopsino) values (m.A_BIOPSINO)
FLUSH FORCE
Bilmediğin Neyse Yanıldığındır.

12

Re: Append blank

Gökçe Özçınar yazdı:

Çok teşekkür ederim üstadım. insert into kullanmak şart oldu. Aslında ilginç olan bunu neden ve ne zaman yapacağının belli olmaması. Test amacıyla sadece tek user'e kayıt girdirdiğim zaman bile arasıra bunu yapıyor. Hatta ve hatta bu sırada diğer user'lar okumak için bile tableyi açmamış oluyorlar. Ama 3 user aynı anda giriş yaparken 300-400 kayıtta bile bu hatayı yapmayabiliyor. Yukarıda yazılı olduğu üzere append blankın hemen ardından başka komut vermeden hemen "replace..." lere başlasam bile sonuç değişmiyor.
Yazdıklarından anladığın kadarı ile insert into da bu durum hiç olmayacak gibi görülüyor.
İlginçtır, ne zaman insert into duysam geçen sene istanbuldaki seminerde ekrana yazdığın o up uzun satır geliyoe aklıma. big_smile

bir yerde hata yapıyorsun. benim 50 kullanıcıda append blank ile çalışan müşterim var.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: Append blank

mrduyar yazdı:
Visual Fox Pro
USE BIOPSI

SET ORDER TO BIOPSINO
FLOCK()  && Yeni kayıt eklenecek - Tüm dosya kilitleniyor.
insert into biopsi (biopsino) values (m.A_BIOPSINO)
FLUSH FORCE

sanırım çok ciddi bir kullanıcı ortamında çalışmıyor senin uygulama. yoksa böyle hapı yutarsın. tüm dosyayı kilitlemek büyük problem olabilir. benim de böyle flock() yapan yerlerim vardı hepsini kaldırdım.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

14

Re: Append blank

metin yazdı:
mrduyar yazdı:
Visual Fox Pro
USE BIOPSI

SET ORDER TO BIOPSINO
FLOCK()  && Yeni kayıt eklenecek - Tüm dosya kilitleniyor.
insert into biopsi (biopsino) values (m.A_BIOPSINO)
FLUSH FORCE

sanırım çok ciddi bir kullanıcı ortamında çalışmıyor senin uygulama. yoksa böyle hapı yutarsın. tüm dosyayı kilitlemek büyük problem olabilir. benim de böyle flock() yapan yerlerim vardı hepsini kaldırdım.

Hakısın. Ki ben bu şekilde kullanmıyorum. Sadece arkadaşın append blank yerine nereye insert into kullanılacak onu göstermek istemiştim.

Bilmediğin Neyse Yanıldığındır.

15 Son düzenleyen, cetinbasoz (18.01.2011 14:03:58)

Re: Append blank

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

16

Re: Append blank

Çetin çok teşekkür ederim. Yine çok değişik fikirler aldım. Diğer arkadaşlardan da tabii.

Deneyeceğim.

Daha önce de yazmıştım. Ben Bornova'dayım, iş yeri Manisa'da (CBÜTF). Bir gün mutlaka uğrayacağım. Aslına bakarsan ben daha yaşlıyım (1959) sad Neleri unutuyorum artık bir bilsen

teşekkürler..