28-09-2009, 22:18
(En son düzenleme: 28-09-2009, 22:35 Zeki Gürsoy.)
Access'te hep DB işlemi (Table/SQL) yapmak zorunda değiliz; başka amaçlarla da kullanabiliriz.
-Liste kutusunda değer listesi (Value List):
Bunun, yaptığım testler sonunda uzun satırlarda (kayıt) belli bir sınırı olduğunu farkettim. Yaklaşık 3.000 kusur kadar...(Yanılıyor olabilirim)
Değişkenin ";" ile ayraçlanıp RowSource' a atanmasından ibarettir ve sınırı aştığında hata dönecektir. AddItem hızı nispeten daha düşüktür ve bu nedenle konumuz süper "Array" lar ve diziyi liste kaynağına uyarlayan "özel" bir fonksiyondur.
Ekteki örnek ile, verilerin liste kaynağına "dizi" nin nasıl atandığını öğreneceksiniz.
"Özel fonksiyon" dedim çünkü fonksiyonun input argumanları(dikkat: değişken isimleri değil) sabittir ve sırf bu iş içindir. Ayrıntılı bilgiyi Access yardımda bulabilirsiniz.
Şu başlıktadır:
RowSourceType Property (User-Defined Function) - Code Argument Values
-Liste kutusunda değer listesi (Value List):
Bunun, yaptığım testler sonunda uzun satırlarda (kayıt) belli bir sınırı olduğunu farkettim. Yaklaşık 3.000 kusur kadar...(Yanılıyor olabilirim)
Değişkenin ";" ile ayraçlanıp RowSource' a atanmasından ibarettir ve sınırı aştığında hata dönecektir. AddItem hızı nispeten daha düşüktür ve bu nedenle konumuz süper "Array" lar ve diziyi liste kaynağına uyarlayan "özel" bir fonksiyondur.
Ekteki örnek ile, verilerin liste kaynağına "dizi" nin nasıl atandığını öğreneceksiniz.
"Özel fonksiyon" dedim çünkü fonksiyonun input argumanları(dikkat: değişken isimleri değil) sabittir ve sırf bu iş içindir. Ayrıntılı bilgiyi Access yardımda bulabilirsiniz.
Şu başlıktadır:
RowSourceType Property (User-Defined Function) - Code Argument Values
Visual Basic
- '************************************
- '********** Zeki Gürsoy *************
- '********** 2009 *************
- '************************************
-
- 'Dizide, tüm sütunlar aynı veri tipinde
- 'olmayacağını varsaydım (Variant)
- Private arr() As Variant
-
- Private Sub Komut2_Click()
- '50 bin satır, 3 sütun.. ;-D
- ReDim arr(1 To 50001, 1 To 3) As Variant
-
- arr(1, 1) = "ADI"
- arr(1, 2) = "SOYADI"
- arr(1, 3) = "TEL NO"
-
- For i = 2 To 50001
- arr(i, 1) = i - 1 & " - zeki"
- arr(i, 2) = "gürsoy"
- arr(i, 3) = "5339999999"
- Next
-
- With Me.Liste0
- '.ColumnCount = 3 'Array dan alınacağından gerek yoktur.
- .ColumnHeads = True
- .RowSourceType = "Liste_Doldur"
-
- MsgBox FormatNumber(.ListCount - 1, 0) & " adet kayıt eklendi..", _
- vbInformation, "::..Zeki..::"
- End With
-
- End Sub
-
- Private Function Liste_Doldur( _
- ctl As Control, _
- varId As Variant, _
- lngRow As Long, _
- lngCol As Long, _
- intCode As Integer)
-
- Select Case intCode
- Case acLBInitialize
- 'İstenirse burada array doldurulabilir..
- Liste_Doldur = True
-
- Case acLBOpen
- 'Fonksiyonun bu tip kullanımında böyledir..
- Liste_Doldur = Timer
-
- Case acLBGetRowCount
- 'Satır(kayıt) sayısı..(-1 belirsizdir)
- 'İstenirse sınır verilebilir...
- Liste_Doldur = -1
-
- Case acLBGetColumnCount
- 'Sütun sayısı..(Dizinin ikinci boyutundan alınıyor)
- Liste_Doldur = UBound(arr, 2)
-
- Case acLBGetColumnWidth
- 'Sütun genişliği..TWIP (Birinci sütun indexi "0" dır)
- Select Case lngCol
- Case 0 'Birinci sütun
- Liste_Doldur = 0.75 * 1440
- Case 1 'İkinci sütun
- Liste_Doldur = 1.2 * 1440
- Case 2 'Üçüncü sütun
- Liste_Doldur = 2 * 1440
- End Select
-
- Case acLBGetFormat
- 'Sütun formatları..(Birinci sütun indexi "0" dır)
- Select Case lngCol
- Case 0 'Birinci sütun
- '
- Case 1 'İkinci sütun
- 'Tarih olsaydı..
- Liste_Doldur = "dd/mm/yyyy"
- Case 2 'Üçüncü sütun
- Liste_Doldur = "000 000 00 00"
- End Select
-
- Case acLBGetValue
- 'Nihayet veri...(Dizinin kaçıncı indexinden listeye doldurulacağı tanımlanır)
- 'arr dizi tabanını "1" olarak belirlediğim için, "+1" kullanmalıyım...
- Liste_Doldur = arr(lngRow + 1, lngCol + 1)
-
- Case acLBEnd
- ' Boş..(Gerekliyse başka birşey..)
- End Select
- End Function
-
- Private Sub Form_Unload(Cancel As Integer)
- Erase arr
- End Sub