RE: Listbox Da Verilerin Listelenmesi Hakkında. - berduş - 16/05/2025
kodun son hali aşağıdaki gibidir
başlıkları da alıyor ama yanılmıyorsam Excel userformdaki listboxlar başlığı sadece Excel sayfasından alırken kullanabiliyor onun için başlığı da diziye ekledim. bu durumda listboxta aşağı indiğinizde başlık alanı da dizi içinde olduğundan kayboluyor
listbox'ın header özelliği HAYIR yapılmalı
Private Sub UserForm_Initialize()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlSorgusu As String
' Bağlantıyı hızlı şekilde aç
Set cn = New ADODB.Connection
cn.ConnectionString = "Driver={ODBC Driver 17 for Sql Server};" & _
"Server=OĞUZ\SQLEXPRESS;" & _
"Database=db_Personel;" & _
"Trusted_Connection=Yes;" & _
"Connect Timeout=5" ' Bağlantıyı 5 saniyede tamamla
cn.Open
' Hızlı veri çekme için Sql sorgusunu hazırlama
sqlSorgusu = "SELECT * FROM [tbl_Personel] WITH (NOLOCK);" ' Kilitlemeyi önleyerek hızlı okuma sağlar
Set rs = New ADODB.Recordset
rs.CursorType = adOpenForwardOnly ' İleriye doğru en hızlı okuma için
rs.LockType = adLockReadOnly ' Veriyi sadece okuma modunda açarak hızlandırma
rs.Open sqlSorgusu, cn
lstPersonel.ColumnCount = rs.Fields.Count
' Veriyi diziye aktar
If Not rs.EOF = True Then
Dim dz As Variant, dzS As Variant
dz = rs.GetRows
ReDim dzS(LBound(dz) To UBound(dz), LBound(dz, 2) - 1 To UBound(dz, 2))
For x = LBound(dz) To UBound(dz)
For y = LBound(dz, 2) To UBound(dz, 2)
dzS(x, y) = dz(x, y)
Next y
Next x
For x = 0 To rs.Fields.Count - 1
dzS(x, -1) = rs(x).Name
Next x
lstPersonel.Column = dzS
End If
' Temizlik
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Exit Sub
HataBaglanti:
MsgBox "Veritabanına bağlanırken bir hata oluştu: " & Err.Description, vbCritical
' Hata durumunda bağlantı nesnelerini temizle
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
HataVeriOku:
MsgBox "Personel verilerini okurken bir hata oluştu: " & Err.Description, vbCritical
' Hata durumunda kayıt kümesi nesnesini temizle
If Not rs Is Nothing Then
If rs.State = adStateOpen Then rs.Close
Set rs = Nothing
End If
' Bağlantıyı da kapatmayı unutmayın (eğer açıksa)
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
End If
End If
End Sub
eğer başlıkların başlık formatında görünmesini istiyorsanız verileri excl sayfasına ekleyip oradan çekmelisiniz
RE: Listbox Da Verilerin Listelenmesi Hakkında. - Oğuz Türkyılmaz - 17/05/2025
(16/05/2025, 19:20)berduş yazdı: kodun son hali aşağıdaki gibidir
başlıkları da alıyor ama yanılmıyorsam Excel userformdaki listboxlar başlığı sadece Excel sayfasından alırken kullanabiliyor onun için başlığı da diziye ekledim. bu durumda listboxta aşağı indiğinizde başlık alanı da dizi içinde olduğundan kayboluyor
listbox'ın header özelliği HAYIR yapılmalı
Private Sub UserForm_Initialize()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlSorgusu As String
' Bağlantıyı hızlı şekilde aç
Set cn = New ADODB.Connection
cn.ConnectionString = "Driver={ODBC Driver 17 for Sql Server};" & _
"Server=OĞUZ\SQLEXPRESS;" & _
"Database=db_Personel;" & _
"Trusted_Connection=Yes;" & _
"Connect Timeout=5" ' Bağlantıyı 5 saniyede tamamla
cn.Open
' Hızlı veri çekme için Sql sorgusunu hazırlama
sqlSorgusu = "SELECT * FROM [tbl_Personel] WITH (NOLOCK);" ' Kilitlemeyi önleyerek hızlı okuma sağlar
Set rs = New ADODB.Recordset
rs.CursorType = adOpenForwardOnly ' İleriye doğru en hızlı okuma için
rs.LockType = adLockReadOnly ' Veriyi sadece okuma modunda açarak hızlandırma
rs.Open sqlSorgusu, cn
lstPersonel.ColumnCount = rs.Fields.Count
' Veriyi diziye aktar
If Not rs.EOF = True Then
Dim dz As Variant, dzS As Variant
dz = rs.GetRows
ReDim dzS(LBound(dz) To UBound(dz), LBound(dz, 2) - 1 To UBound(dz, 2))
For x = LBound(dz) To UBound(dz)
For y = LBound(dz, 2) To UBound(dz, 2)
dzS(x, y) = dz(x, y)
Next y
Next x
For x = 0 To rs.Fields.Count - 1
dzS(x, -1) = rs(x).Name
Next x
lstPersonel.Column = dzS
End If
' Temizlik
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Exit Sub
HataBaglanti:
MsgBox "Veritabanına bağlanırken bir hata oluştu: " & Err.Description, vbCritical
' Hata durumunda bağlantı nesnelerini temizle
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
HataVeriOku:
MsgBox "Personel verilerini okurken bir hata oluştu: " & Err.Description, vbCritical
' Hata durumunda kayıt kümesi nesnesini temizle
If Not rs Is Nothing Then
If rs.State = adStateOpen Then rs.Close
Set rs = Nothing
End If
' Bağlantıyı da kapatmayı unutmayın (eğer açıksa)
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
End If
End If
End Sub
eğer başlıkların başlık formatında görünmesini istiyorsanız verileri Excel sayfasına ekleyip oradan çekmelisiniz
Berdus hocam Teşekkür ederim yanıtınız için. Verdiğiniz kod ile sorun halloldu. Kodunuzu tabiki herzaman ki gibi anlamadım ama demek ki 10 sütundan fazlası da Listboxda gösterilebiliyormuş.
RE: Listbox Da Verilerin Listelenmesi Hakkında. - Oğuz Türkyılmaz - 17/05/2025
Benim internetten bulduğum çözümde şu şekilde. Sadece 10 adet sütun gösterilebiliyor ama koddan da anlaşılacağı üzere onları da seçme şansınız var.
Private Sub UserForm_Initialize()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlSorgusu As String
Dim i As Integer, j As Integer
Dim rowIndex As Long
Dim gosterilecekSutunlar As Variant
Dim sutunGenislikleri As String
' Hangi sütunlar gösterilecek (max 10)
gosterilecekSutunlar = Array(0, 1, 2, 3, 4, 7, 8, 10, 11, 12)
' Genişlikler: 10 değer olmalı
sutunGenislikleri = "15;110;70;70;60;80;130;70;70;90"
Set cn = New ADODB.Connection
cn.ConnectionString = "Driver={ODBC Driver 17 for Sql Server};" & _
"Server=OĞUZ\SQLEXPRESS;" & _
"Database=db_Personel;" & _
"Trusted_Connection=Yes;"
On Error GoTo HataBaglanti
cn.Open
On Error GoTo 0
sqlSorgusu = "SELECT * FROM tbl_Personel;"
Set rs = New ADODB.Recordset
On Error GoTo HataVeriOku
rs.Open sqlSorgusu, cn, adOpenStatic, adLockReadOnly
On Error GoTo 0
If rs.EOF Then GoTo TemizleHerşey
With lstPersonel
.Clear
.ColumnCount = UBound(gosterilecekSutunlar) + 1
.ColumnWidths = sutunGenislikleri
.MultiSelect = 0
End With
' Verileri ekle
Do While Not rs.EOF
lstPersonel.AddItem NzText(rs.Fields(gosterilecekSutunlar(0)).Value)
rowIndex = lstPersonel.ListCount - 1
For j = 1 To UBound(gosterilecekSutunlar)
lstPersonel.List(rowIndex, j) = NzText(rs.Fields(gosterilecekSutunlar(j)).Value)
Next j
rs.MoveNext
Loop
lstPersonel.ListIndex = -1
TemizleHerşey:
rs.Close: cn.Close
Set rs = Nothing: Set cn = Nothing
Exit Sub
HataBaglanti:
MsgBox "Veritabanına bağlanamadı: " & Err.Description, vbCritical
Resume TemizleHerşey
HataVeriOku:
MsgBox "Veri okunamadı: " & Err.Description, vbCritical
Resume TemizleHerşey
End Sub
RE: Listbox Da Verilerin Listelenmesi Hakkında. - berduş - 17/05/2025
Rekordsette de başlıklar ve sırası seçilebilir. Select * from tabloAdi yerine
Select alan5, alan2, alan7 feom tabloAdi gibi bir sorgu ihtiyacınızı görür.
RE: Listbox Da Verilerin Listelenmesi Hakkında. - Oğuz Türkyılmaz - 17/05/2025
(17/05/2025, 11:12)berduş yazdı: Rekordsette de başlıklar ve sırası seçilebilir. Select * from tabloAdi yerine
Select alan5, alan2, alan7 feom tabloAdi gibi bir sorgu ihtiyacınızı görür.
Onu da deneyeceğim, çok teşekkür ederim yardımlarınız için.
RE: Listbox Da Verilerin Listelenmesi Hakkında. - berduş - 17/05/2025
rica ederim
iyi çalışmalar
|