Avatar billede nannami Nybegynder
11. august 2005 - 12:24 Der er 15 kommentarer og
1 løsning

Hente data til tekstbokse-problem

Hej, jeg henter data fra min bruger DB ud i diverse tekstbokse via følgende kode:

StrSQL = "SELECT Bruger.*, PostTabel.By, FROM PostTabel INNER JOIN Bruger ON PostTabel.Postnr = Bruger.Postnr where Brugerid= " & ID & ";"
                                 
            objComm = New OleDbCommand(strSQL, objConn)
            objDataReader = objComm.ExecuteReader()
   
            If objDataReader.Read() Then 
           
                LblNavn.Text = objDataReader("Navn")
                LblEfternavn.Text = objDataReader("Efternavn")
                LblAdresse.Text = objDataReader("Adresse")
                LblPostnr.Text = objDataReader("Postnr")
                LblBy.Text = objDataReader("by")
                LblFax.Text = objDataReader("Fax")
                LblTelefon.Text = objDataReader("Telefon")
                LblMobil.Text = objDataReader("Mobil")               
                LblMail.Text = objDataReader("Email")
                LblPassword.Text = objDataReader("Password")
                LblWeb.Text = objDataReader("Web")         
                             
            End If

Det virker fint hvis der findes en værdi i alle felterne i databasen. Problemet er, at hvis f.eks. feltet "Fax" i min DB er tomt, så bliver resten af felterne i mit udtræk også tomme.
Avatar billede softspot Forsker
11. august 2005 - 12:42 #1
Hmmm... jeg studser lige i første omgang over dit SQL-statement, men hvis du siger det fungerer, så er det nok bare en tastefejl at der er et komma efter PostTabel.By. En anden ting jeg noterer mig er at du bruger et reserveret ord (by) som feltnavn - uden at sætte det i firkantede paranteser. Det kan dog godt være at du bliver reddet af at feltet er foranstillet med tabelnavnet - vær dog opmærksom på denne lille fejlrisiko i andre sammenhænge (vis du ikke allerede er det).

Har du prøvet at køre dit udtryk i databasen, f.eks. en query i Access eller i Query Analyzer på SQL Server (ved ikke lige hvilken dataase du bruger)? Helst på en række hvor fax er tom? Det kan evt. give dig en indikation af hvad der kan være galt...
Avatar billede softspot Forsker
11. august 2005 - 12:44 #2
Ehm... "(vis du ikke allerede..."

"hvis" staves vist nok med h sidst jeg checkede... :/
Avatar billede arne_v Ekspert
11. august 2005 - 12:53 #3
catcher du en exception ?
Avatar billede nannami Nybegynder
11. august 2005 - 13:05 #4
Hej.

Softspot - tag dig ikke af SQL-udtrykket, jeg forenklede det hele hurtigt for at fremme forståelsen. Det er Access, og der skulle ikke være nogen fejl i query'en, da det jo virker fint, bare der findes en værdi for hver record.

Arne_v - Ja, jeg har catch exception på, men der kommer ikke noget ud af det. Mine labels forbliver bare tomme, fra og med den tomme record.
Avatar billede arne_v Ekspert
11. august 2005 - 13:08 #5
skriver du noget ud hvis du får en exception ?

(jeg tror at det er en exception som får den til at stoppe !)
Avatar billede nannami Nybegynder
11. august 2005 - 13:50 #6
Du har ret. Da jeg i mit tilfælde ikke har noget til at stå i "fax" får jeg:


Exception Details: System.InvalidCastException: Cast from type 'DBNull' to type 'String' is not valid.

ved:

LblFax.Text = ObjRs("Fax")

Men burde den ikke bare udskrive et tomt felt også gå videre til næste record?
Avatar billede softspot Forsker
11. august 2005 - 13:52 #7
gad vide om det gamle VB-trick stadig fungerer:

LblFax.Text = ObjRs("Fax") & ""

eller skal man igennem noget med et typekonvertere (cast)?
Avatar billede nannami Nybegynder
11. august 2005 - 14:02 #8
Mærkeligt nok at man skal bruge det, men det ser ud til at dit VB-Trick fungerer fint! :-)
Avatar billede softspot Forsker
11. august 2005 - 14:05 #9
Tjah, det er åbenbart en af de der typeforskelle (DBNull og String) som VB ikke vil konvertere automatisk (kører du med Option Strict?)...
Avatar billede nannami Nybegynder
11. august 2005 - 14:06 #10
nej, det kender jeg ikke.. Hvad er det?
Avatar billede softspot Forsker
11. august 2005 - 14:14 #11
Ifølge min opfattelse af denne option, så er det en besked til VB.NET om, at den skal være streng med typecheck - således sproget kommer til at ligne C# og andre typestærke sprog, hvad angår typelighed i tildelinger af variabelværdier.
Eksempelvis vil det ikke være muligt at tildele en numerisk værdi til en streng-variabel, som det vil uden option strict (da VB uden strict selv konverterer værdien til en streng). Det bliver dog også lidt mere besværligt at kode med Option Strict, da du så eksplicit skal konvertere typer hver gang der skal konverteres (og hvis du er vant til den "løse" typekontrol, så vil du nok føle dig hæmmet af Strict.
Avatar billede nannami Nybegynder
11. august 2005 - 15:26 #12
Okay - dvs. at jeg ved strict f.eks. er nødt til at behandle telefonnumre og postnumre som nummeriske, selvom jeg jo ikke ligefrem skal udføre regnestykker med dem?

Smid svar :-)
Avatar billede softspot Forsker
11. august 2005 - 15:31 #13
Nej, det skal du ikke, for du kan godt lagre telefonnumre som strenge. Hmm... jeg tror min formulering var forkert, jeg mente variable som har numeriske typer så som integer, long, double osv. og ikke den semantiske værdi.

Anyway! Godt at du fik løst dit problem. :)
Avatar billede arne_v Ekspert
11. august 2005 - 17:22 #14
Det fremgår klart at der ikke bruges

Option Strict

fordi hvis man gør så skal

LblFax.Text = ObjRs("Fax")

nemlig skrives som

LblFax.Text = CType(ObjRs("Fax"), String)

for at undgå en compiler fejl.

Den gængse .NET måde at løse poroblemet på må være:

If Not ObjRs.IsDBNull(5) Then
    LblFax.Text = CType(ObjRs(5),String)
Else
    LblFax.Text = ""
End If
Avatar billede thrytter Nybegynder
11. august 2005 - 21:25 #15
Vil mene at den korrekte .NET måde må være:
  LblFax.Text = objRS(5).ToString

Er CType for øvrigt ikke en Visual Basic tingest !!
Avatar billede arne_v Ekspert
11. august 2005 - 21:29 #16
uenig - .ToString er ligesom +"" er måde at omgå type check på

nej - så vidt jeg ved et CType en VB.NET builtin og ikke en Microsoft.VisualBasic ting
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester