Jag har ett boolean-fält i en Access-databas. När jag läser värdet från den så kommer det som Sant eller Falskt. Du kan tvinga fram en typomvandling till numerisk: Det vill inte riktigt fungera... Hmm det fungerade visst när jag testade i Access... då antar jag att det är nått annat som spökar... Kan det inte bero på att fältnamnet byts ut mot "Expr1" eller nåt ? Hej! Jag använder ADO 2.6 i ett VB-program. När jag hämtar ett recordset från en Access 2002 databas med ADO 2.5/Microsoft.Jet.OLEDB.4.0 och kör Debug.Print på varje post får jag True/False från mitt boolska fält. Jag öppnar båda databaserna: Con, RS, Con2 Är du säker på att ADO returnerar strängen "Sant"? >Con.Execute "INSERT INTO Tabell (fält1, fält2, fält3) VALUES ('" & RS2("fält1") & "', '" & RS2("fält2") & "', " & RS2("fält3") & ")" Använder jag Msgbox RS("fält") så får jag iaf ut "Sant". >Msgbox RS("fält") Svenskt svar från en Access-databas
Hur får jag det till True/False eller 0/-1?
Problemet är att jag kopierar infon från en databas till en annan, och när jag lägger in datat i den nya databasen så funkar det inte med Sant/Falskt.
Och att först kolla om det är "Sant" och sen ändra till "True" känns inte som nån fin lösning...
ThomasSv: Svenskt svar från en Access-databas
SELECT [fieldname]*1 ... ger 0/-1 eller om du hellre vill:
SELECT [fieldname]*(-1) ... ger 0/1
(Om du inte skriver i SQL kan du använda frågeguiden och 'klicka' dit fältnamnet och
sedan skriva till *1 respektive *(-1) för hand.)Sv: Svenskt svar från en Access-databas
När jag försöker läsa det fältet så får jag svaret:
Item cannot be found in the collection corresponding to the requested name or ordinal.
ThomasSv: Svenskt svar från en Access-databas
ThomasSv: Svenskt svar från en Access-databas
Beror på hur man hämtar datat ur recordsetet iofs.
Testa att skriva SELECT [Fältnamn]*1 AS Fältnamn
/JohanSv: Svenskt svar från en Access-databas
Antar att du jobbar i ASP och VB Script?
Och att du hämtar datat ur databasen via ett ASP-script?
I så fall kan du testa resultatet i en If-sats
<%
If rs("Fältnamn") = "Sant" Or rs("Fältnamn") = "Falskt" Then
bValue = rs("Fältnamn")
If bValue = "Sant" Then
bValue = 1
Else
bValue = 0
End If
End If
' Testa utdata
Respone.Write(bValue)
%>
Ha dé
SvenneSv: Svenskt svar från en Access-databas
Jag vill inte kolla om det är "Sant" eller "Falskt" eftersom det antagligen blir nått helt annat om man kör nån annan språkversion av Windows.
ThomasSv: Svenskt svar från en Access-databas
Fältet är väl Boolean oavsett hur det presenteras!? Hur kopierar du till din andra databas?Sv: Svenskt svar från en Access-databas
<code>
Set RS2 = Con2.Execute("SELECT * FROM Tabell")
Do Until RS2.EOF
Con.Execute "INSERT INTO Tabell (fält1, fält2, fält3) VALUES ('" & RS2("fält1") & "', '" & RS2("fält2") & "', " & RS2("fält3") & ")"
RS2.MoveNext
Loop
</code>
Fält3 är ett boolean-fält.
ThomasSv: Svenskt svar från en Access-databas
Jag skulle tro att det är en Variant av typen boolean som returneras.
Det är först när denna Variant omvandlas till en sträng någonstans i VB koden som det blir "Sant"
pröva med att göra
TypeName(recordset!field)Sv: Svenskt svar från en Access-databas
Byt ut RS2("fält") mot
Array("True","False")(RS2("fält")+1)
eller
Cint(RS2("Fält"))Sv: Svenskt svar från en Access-databas
Hur använder jag TypeName()? Skriver jag:
<code>
Msgbox TypeName(RS2!fält3)
</code>
så får jag ut "Field".
Lika med:
<code>
Msgbox TypeName(RS2("fält3"))
</code>
ThomasSv: Svenskt svar från en Access-databas
Detta innebär en automatisk konvertering från boolean till sträng. dvs samma sak som att skriva
CStr(True)
Lite osäker men jag tror att ".Value" är default för typen field så du måste nog skriva "TypeName(RS2!fält3.Value)"