» »

Klicanje podatkov iz baze preko ID-ja v VB??

Klicanje podatkov iz baze preko ID-ja v VB??

erik ::

Imam bazo Vreme.mdb z tabelo Napoved in dvemi stolpci "ID" in "Prognoza".
Imam tudi formo za vnos podatkov. Na to formo bi rad klical podatke iz prej omenjene baze se pravi iz šifranta. Rad pa bi naredil na ta način, da bi imel gradnik textbox poleg njega pa gradnik label, oba prazna. V textbox bi rad vpisal ID številko iz baze, pritisnil Enter in v polju label bi se mi izpisal podatek ki pripada temu ID-ju v bazi. Skratka rad bi klical podatke iz šifranta samo z številkami.
Ali se komu sanja kako bi lahko to naredil. Kakšna ideja.
Hvala za odgovor...

Equinoxe ::

SQL...

Nekaj po logiki, kar je v textboxu poveži z tabelo Napoved, in label naj prikaše Prognoza.

Imaš pa več načinov da to narediš.
Potem je še odvisno ali boš tu tudi kaj vnašal, ali boš imel za to posebno formo....

Če ti ne bo šlo se pa le oglasi.

erik ::

Hm..SQL ..nekaj sem poizkušal...
SQL poznam toliko, da znam iz baze izbrskati potrebne podatke v datagridu na podlagi SELECT xx FROM xx WHERE XX.
V bazo pa se znam priklopiti z Adodc kontrolo.
V bistvu ne znam povezati odvisnosti gradnika label z texboxom. Kako narediš sploh z SQL-om da na podlagi vnesene cifre izpiše podatek pripadajoč cifri. Verjetno bi moral ob Form_Load narediti priklop na bazo šifranta in potem narediti label "občutljiv na textbox" ali kako?...

Hvaležen bom za vsak nasvet...

Zzzzzzz ::

Takšno stvar je najbolje naredit ročno.

Ko pritisneš enter v textboxu, naj se izvede koda, ki naredi sledeče:

sql = "SELECT * FROM xxxxx WHERE id=" & textbox.text & " LIMIT 1"
' izvedi sql stavek in preko recordset objekta izpišeš vrednost v labelo
label1.caption = rs1!ImeStolpca

S tem, da moraš uporabit naslednje deklaracije, NE adodb kontrole.
conn = new connection
rs = new recordset

PS: V VB-ju nisem že dolgo programiral, tako da sem to zgoraj napisal bolj na podlagi pameti, kot na podlagi sigurnega znanja... :\

erik ::

Najprej hvala za odgovor...

Nekaj sem probal.. A mi lahko malo razložiš kaj vse moram deklarirati, kje priklopim bazo in kaj pomeni tista rs1!ImeStolpca.. <----pri temu javi napako

Hvala.

Zzzzzzz ::

Verjetno sem res narobe napisal.
To pa zato, ker sem večinoma delal z bazami preko Data Environmenta, ki se malce razlikuje od adodb-ja. In kot zakleto v tem trenutku ne najdem nobenga primera z adodb-jem, MSDN Library pa nimam nameščen (sveže postavljen sistem).:D

V glavnem, klicaj je okrajšava:
Tole kranjsko klobaso: dataenvironment.recordset.fields("ImePolja").Value
Lahko krajše zapišemo kot: dataenvironment.recordset!ImePolja

To da javi napako je premalo povedat. Kaj javi?
Takole na pamet ugibat je vsaj po mojem mnenju malce neumno, se ti ne zdi?

Equinoxe ::

Ne vem koliko še to rabiš zato bom bolj kratek (in skop).

Jaz bi to naredil tako:
Na formo dodam kontroli Data in recimo DBGrid.
Potem rečem da je Data.database... Data.recordsource=SQL
SQL pa je seveda Opis iz tabele XXX za ID XXX (ki je vpisan v txtboxu ali comboju).
Potem rečem le še:
Label.caption=DBGrid.Seltext (ker je vedno le en zadetek).

Če ti kaj ne bo delalo ali če to sploh še rabiš pove, pa napišem točno kodo.

LP

P.S. Zvonko tebe pa tudi jaz nisem povsem razumel. Morda zato ker sem začetnik (se vidi tudi na moji primitivni rešitvi - ki pa dela!).

erik ::

Seveda še potrebujem kodo..:)

Bom probal tvojo varianto, od Zvonkoda mi ni povsem delovala. Mogoče bi če bi bolj pretuhtal.
Če imaš čas bi te prosil za bolj natančno kodo, da enkrat dokončam to z šifranti.

Hvala za odgovor obema...

Zzzzzzz ::

Probej tole. Teoretično dela, v praksi pa ni sprobano.

Questions can be asked here. :D


Private cn As ADODB.Connection
Private Seznam As Collection

Sub Form_Load()
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=baza.mdb"
cn.Open
End Sub

Sub NaloziPodatke()
Dim rSet As New ADODB.Recordset
Set seznam = New Collection

With rSet
.Open "SELECT * FROM Tabela", cn, adOpenStatic, adLockOptimistic
' Move To last record to get a RecordCount, then move back.
.MoveLast
.MoveFirst
End With

Do While Not rSet.EOF
List1.AddItem rSet!ImePolja
Seznam.Add(rSet!ImePolja, rSet!ID)
Loop
End Sub

Sub Text_KeyUp()
If KeyAscii = 13
Label1.Caption = Seznam.Item(Text1.Text)
End If
End Sub

erik ::

Malo se predelal, ker mi je javljalo nekaj napak. Sedaj zgleda takole:

Private cn As ADODB.Connection
Private Seznam As Collection

Sub Form_Load()
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Vreme.mdb" & ";Persist Security Info=False"
cn.Open
End Sub

Sub NaloziPodatke()
Dim rs As New ADODB.Recordset
Set Seznam = New Collection

With rs
.Open "SELECT * FROM Napoved", cn, adOpenStatic, adLockOptimistic
' Move To last record to get a RecordCount, then move back.
.MoveLast
.MoveFirst
End With

Do While Not rs.EOF
List1.AddItem rs!Prognoza
Seznam.Add (rs!Prognoza, rs!ID) <-----TU JAVI NAPAKO (pričakuje izraz =)
Loop
End Sub

Sub Text_KeyUp(KeyCode As Integer)
If KeyCode = 13 Then
Label1.Caption = Seznam.Item(Text1.Text)
End If
End Sub

Kakšna ideja??? Hvala...

Zzzzzzz ::

Ups... Mislm, da rabiš v tisti vrstici brisat oklepaje... :D

erik ::

Zanimivo, nič se ne zgodi, ko vpišem ID cifro in dam Enter vendar tudi nobene napake ne javi :)

Zzzzzzz ::

Če ne javi nobene napake, potem dela "pravilno", vendar pravilno le za compiler. To je podobno kot črkovalnik v Wordu: Če se stvar podreja pravilom je zanj pravilna, pa tudi če je na napačnem mestu.

In če je stvar pravilna za compiler, ampak ne dela, potem je nekaj narobe. :\
Kaj bi pa moglo bit narobe nimam pojma. Na pogled bi mogla stvar delovat, ni mi pa jasno zakaj ne.
Če ti ne izpisuje nič, je verjetno kaj narobe z vnosom ID cifre. Poskusi počistit string (trim()) ali pa ga spremenit v integer (cint()) ali kaj podobnega.
Lahko probaš tudi "Label1.Caption = Seznam.Item(Text1.Text)" dat v proceduro "Text1_Change".
Skratka, igraj se!:D

erik ::

Hvala za nasvete, bom že nekaj naredil iz tega...:)

Equinoxe ::

Pa pol po možnosti če že ne poveš kako si naredil, povekj vsaj al ti je ratal al ne :)

erik ::

Ja ni še ratalo. Priznati moram, da se nimam vsak dan časa sesti pred računalnik :) Probal sem narediti tudi nekaj iz tvoje ideje vendar ne razumem zakaj si dodal DBGrid. Ali mogoče služi DBGrid kot skriti gradnik za kakšno funkcijo? Na formi tega ne potrebujem, potrebujem samo textBox in Label. ..... V tem se šele začetnik, zato prosim oprosti(te) če takoj ne razumem tistih vrstic, ki mi jih napišete. Nisem namreč "mojster" za dopolnjevanje kod. Vse kar sem naredil do zdaj v programu sem naredil z sampli kod (no nekaj sem tudi sam primaknil). Samo nočem zaradi začetniškega neznanja opustiti programa, ki ga pišem. Počasi se daleč pride. S prakso bom že pogruntal to logistiko v VB-ju a ne...

Zzzzzzz ::

Ne skrbi, tako kot pravi stari pregovor: Počasi se daleč pride. :\
Nihče se ni še rodil, da bi vse znal. Sploh pa nekaj volje lahko naredi veliko. Le obupat ne. Čeprav je na začetku veliko napak, nejasnosti in podobnih situacij, ko si človek razbija glavo zakaj za vraga to ne dela, čeprav bi moralo, naj te to ne odvrne. Ponavadi je razlog tega razbijanja glave ob zid prav banalen. Verjemi.

Pa še to, glede napake, da VB "pričakuje izraz". To je pogosta napaka, ki jo v VB-ju(programerji) delamo. Stvar je v tem, da če kličeš proceduro ne smeš podati parametrov v oklepaju, medtem ko če kličeš funkcijo, pa morajo biti parametri v oklepaju. Tu se lahko človek mimogrede zmoti, še posebej če programira večinoma v jezikih, ki tega ne ločujejo.

PS: Jst v VB-ju nisem aktivno programiral že več kot eno leto, tko da mi gre prow na živce, ko hočem dajat podpičja na konec vrstice... :D

Equinoxe ::

Pozno, ampak vseeno.
Na formo moraš dodati Data1 in DbGrid. Oboje je lahko za vidnim robom forme, ali pa visible=false.
txt polja oz. njihova imena v SQL so kao iz tvoje baze....
Potem napiši tole pod dogodek click ali change (ne vem več kadj hočeš avtokompletiranje text boxa...
Dim IskaniID As String
IskaniID = txtVnosnopolje.Text 'oziroma cmbVnos.text
Dim SQL_Iskani As String
SQL_IskaniRK = "SELECT tblVreme.IDvreme From tblVreme " & _
"GROUP BY tblVreme.IDvreme, tblVreme.Vreme " & _
"HAVING (((tblVreme.Vreme) Like '" & IskaniID & "'));"

Data1.DatabaseName = App.Path & "\BPCementAF_97.mdb"
Data1.RecordSource = SQL_Iskani
Data1.Refresh
DBGrid.Refresh

If txtVnosnopolje.Text = "" Then
txtVnosnopoljeAK = ""
Else
txtVnosnopoljeAK = DBGridRazKLicAK.SelText
End If

erik ::

Hvala, bo poizkusil...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# povezava forma in classa

Oddelek: Programiranje
172144 (1607) Miko55
»

Baza & c#

Oddelek: Programiranje
214016 (3074) xardas
»

[C#] ne dodaja podatkov v bazo

Oddelek: Programiranje
91533 (1382) alesp56
»

problem v C#

Oddelek: Programiranje
211882 (1597) dvojka
»

asp+access problem

Oddelek: Izdelava spletišč
8983 (914) appz

Več podobnih tem