2016-03-21 29 views
0

Bir düğmem var ve bir kez tıkladıktan sonra müşteri kimliğini girmeniz gerekiyor ve bir kez girildikten sonra tüm satırdaki veriler metin kutusuna, onay kutusuna vb. , benim kendi hatamın yanı sıra Müşteri'nin bulunamadığını söyleyerek oluşturduğumu söyler. Herhangi bir yardım takdir!Girdiler tarafından girilen belirli bir satırdaki verileri al

Benim düşünceme göre - Nerede ID (ID) olduğunu yüklediğimde, yalnızca o satırdaki tüm bu satırdaki verilerin o Müşteri Kimliğindeki (istediğim) yüklenmesini düşünüyorum, bu yüzden satırları kullanabilirim. gerekli bilgilerde yüklenen öğeler vb. Bu doğru mu yoksa? Genelde sadece verileri almak ve metin kutularıma ve buna benzer şeylere yardım etmek için yardıma ihtiyacım var.

Kodu:

Private Sub Client(ByVal ans As String) 
    If con.State = ConnectionState.Closed Then con.Open() 

    cmd = New OleDbCommand 
    cmd.Connection = con 
    cmd.CommandText = "Select * FROM tbl WHERE ID = ?" 
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans 
    If cmd.ExecuteNonQuery() = 0 Then 
     MsgBox("Does not exist!", MsgBoxStyle.Critical, "Enter new ID!") 
    Else 
     MessageBox.Show("Now loaded.", "Search Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     If con.State = ConnectionState.Closed Then con.Open() 
     'create data adapters 
     sql = "Select * from tbl" 
     da = New OleDbDataAdapter(sql, con) 
     da.Fill(ds, "tbl") 
     RecCnt = ds.Tables("tbl").Rows.Count 'how many records in ds 
     'assign data to lables 

     TxtCI.Text = ds.Tables("tbl").Rows(0).Item(0) 

     con.Close() 
    End If 
    cmd.ExecuteNonQuery() 
    con.Close() 
End Sub 

Arayan (Arama düğmesi): İstemci (custid)

+1

CustomerID gerçekten bir metin fie ld? Ve lütfen dil etiketlerini ("VB.NET") – Plutonix

+0

başlığına koymayı bırakın. Veritabanında veri türü otomatik numaradır, ancak bir metin kutusu kullanmaya çalışıyorum, böylece 10 yazdığımda ve veriyi yükleyecektir. satır 10 :) –

+0

Evet, ancak 'cmd.Parameters.Add ("? ", OleDbType.VarChar) .Value = ans', DB'ye metin/dize olarak iletiliyor. Option Strict'i açmalısınız, bu kodda bazı örtülü dönüşümler var. – Plutonix

cevap

1

ExecuteNonQuery bir deyim ile düzgün çalışamaz. Döndürülen değer, etkilenen satırların sayısıdır, ancak bir SELECT ifadesi değişmez, herhangi bir satırı eklemez veya silmez, bu nedenle her zaman sıfırdır.

Sen ExecuteReader kullanmalıdır (ve bu da DataSet/Tablolar/Satırlar/Sütunlar hiyerarşi

If con.State = ConnectionState.Closed Then con.Open() 
cmd = New OleDbCommand 
cmd.Connection = con 
cmd.CommandText = "Select * FROM tblcustomer WHERE CustomerID = ?" 
cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans 
Dim reader As OleDbDataReader = cmd.ExecuteReader() 
if reader.Read() Then 
    TxtCI.Text = reader(0).ToString() 
    TxtName.Text = reader(1).ToString() 
    ... and so on ... 
Else 
    MsgBox("Customer Does not exist!", ....) 

gelen değerleri almak için bir OleDbDataAdapter, DataTable/Dataset ve uzun soluklu açıklamada hatlarını kullanma ihtiyacı ortadan kaldırır Sütun ismini (0,1,2 vs ...) sütun ismiyle ("CI", "İsim" vb.) Ikame edebileceğinize dikkat edin. Bu, siparişe bağlı olmadığı için biraz daha iyidir. SELECT * sorgu tarafından döndürülen (Tabii ki, sütunları değiştirirseniz, aynı sorunu var, ancak, en azından, değişikliği hakkında bilmelisiniz)

+0

OleDbDataReader okuyucusunun bildirilmediğini söylüyor. Bu sizin adınıza bir mistype mı yoksa? Ve teşekkürler! –

+1

@ irishwill2008 o orada bazı C# sözdizimi vardı ... tekrar kontrol edin – Plutonix

+2

@Plutonix şimdi uyku vakti için teşekkürler – Steve

İlgili konular