Ingen som kan? :OO
Vill ni att jag skall förklara utförligare så säg bara till! Jag behöver verkligen hjälp!
21 svar · 484 visningar · startad av koltrasten
Hej!
Jag har samma uppsättning av min sida, dels på min PWS och dels på mitt webbhotell. Det är samma script och den är kopplad till samma mySQL-databas.
I ett fält i mySQL-databasen finns ett decimaltal, exempelvis 3,78175 och 4,74. Datatyp=Double(10,5)
Aspkoden är lätt - den skriver bara ut vad som finns i det fältet - alltså <%=RecSet("Faltet")%> (obs - ej recordset).
I PWS:en blir det finfint. Där skrivs hela talet ut - alltså 3,78175 skrivs ut som 3,78175.
På webbhotellet blir det inte bra. Där blir 3,78175 då ASP-koden körs 4.
Det fungerar heller inte om jag kör Round.
Min PWS är på svenska och webbhotellets server är på engelska...
Tack för all hjälp!
Ingen som kan? :OO
Vill ni att jag skall förklara utförligare så säg bara till! Jag behöver verkligen hjälp!
Verkar märkligt.. Enda jag kommer o tänka på först är att man brukar använda punkt i engelska istället för komma. Men då borde det ju inte bli 4..
Har du kollat så värdet i databasen på servern verkligen är 3,78175?
Lite mer info kan nog vara på sin plats annars ;)
-Eitraz
ok :)
Följande enkla kod kör jag:
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={mySQL};Server=xxxxxxxxxxxxx;Database=xxxxxxxx;UID=xxxxxxxx;PWD=xxxxxxx;option=xxx"
Visa = "SELECT * FROM Data WHERE ID=60"
Set RecSet = Connect.execute(Visa)
%><%=RecSet("Faltet")%><%
Set RecSet = Nothing
Connect.Close
%>
I mySQL-databasen innehåller Faltet 3,78175
Då jag kör ovanstående kod med min PWS står det 3,78175
Då jag kör ovanstående kod på webbhotellet står det 4
Datatypen i mySQL-databasen är Double(10,5)
Varför blir det så här? Fråga om det inte är något ni förstår! Jag behöver er hjälp!
Har du kollat så värdet i databasen på servern verkligen är 3,78175?
Ja - det står 3,78175 och det går inte att ersätta med ett punkt-tecken.
Vad kan det vara som är galet?
Då du använde Round, angav du antalet decimaler då också?
ex. Response.Write Round(RecSet("Faltet"), 5)
Annars kan du typomvandla värdet till en sträng då du visar det.
ex. Response.Write cStr(RecSet("Faltet"))
Då du använde Round, angav du antalet decimaler då också?
Jajamensan - och det blir ändå i heltal.
Samma problem. Vad kan det vara som är galet? :( :OO
Ingen som har fler teorier? Är det något med mySQL-en?
Kan det vara datatypen Double(10,5) eller är det något med komma och punkt som strular?
PWS -> svenskt
Webbhotell -> engelskt
mySQL -> står med kommatecken iaf
Har du provat det palleman sa, att typomvandla fältet till en sträng?
Response.Write cStr(RecSet("Faltet"))
Hej!
Tack för svaret Jeppe! :bire
Då jag försöker omvandla den till en sträng visas 4 - alltså fel.
Fler förslag? Kan det ha med kommatecken+punkt i mySQL:en att göra? :l
koltrasten skrev:
Kan det ha med kommatecken+punkt i mySQL:en att göra? :l
Nej, det ska det inte ha någonting med att göra. Däremot: Kör du mot samma databasserver lokalt som på webhotellet? Om inte, kolla så inställningarna / datatyper osv är lika på de två databasservrarna.
Mvh
Tack för svar, Anders! :bire
På mitt webbhotell finns det en mySQL-server. Den är alltså kopplad till samma server. På min PWS kopplar jag alltså upp mig till databasen på webbhotellet.
Andra förslag? Borde inte du kunna klara detta Anders? :e
koltrasten skrev:
Borde inte du kunna klara detta Anders? :e
Hehe, jo, det kanske man kan tro. ;)
Det är alltså samma connectionstring du använder lokalt som live. Koden du visade, är det all kod på sidan?
Jag kan inte riktigt förstå vad som orsakar detta.
Jag funderar vidare...
Mvh,
Det är alltså samma connectionstring du använder lokalt som live. Koden du visade, är det all kod på sidan?
Japp - det är den enda koden. Dock skall naturligtvis xxxxxxx ersättas med korrekta uppgifter.
Den enda teori som jag har är den jag skrev innan. Att
PWS = komma
mySQL = komma
Webbhotell = punkt
PWS+mySQL = komma
Webbhotell+mySQL = punkt
I mySQL ligger det med komma och då webbhotellet försöker hämta det från mySQL-databasen blir det ett heltal då webbhotellet inte förstår komma. Men det kan kanske inte vara så? :OO
Okej, det här var bland det märkligaste jag varit med om.
Så här ligger det till:
Om man ställer SQL-frågan direkt mot MySQL-servern (i ex. MySQL-Front), så fungerar den galant. När man istället ansluter via sin ASP-sida och ställer samma SQL-fråga, försvinner decimalerna ute i cyberspace. Förbaskat lustigt. Jag började fundera en aning.
Vad är skillnaden?
Det enda jag kan komma på är den lilla manick som kallas MyODBC, som kan skilja i version mellan din (och min) maskin, och aleborgs server. Det är mycket möjligt att det finns en bugg i den version av MyODBC som körs på aleborgs server. Jag lyckades dock inte ens efter idogt sökande hitta någon information om liknande bugg i vare sig MySQL eller MyODBC.
Jag försökte komma runt problemet på en del olika sätt, men stötte på patrull när jag skulle konvertera double-fältet till en annan datatyp. Det visar sig att den stabila version av MySQL som körs på servern inte stödjer vare sig CONVERT eller CAST.
Lösningen (eller rättare sagt en fungerande work-around), ser ut så här:
Lägg till en tom sträng på slutet av varje decimaltalsfält du vill hämta ut, med CONCAT. Detta innebär att du måste specificera alla fält du ska använda i din SQL-fråga, du kan alltså inte skriva bara SELECT * FROM... om du skall göra på det här sättet.
SELECT CONCAT(Poang, '') AS Poang, CONCAT(Betyg, '') AS Betyg, Fält1, Fält2, Fält 3 FROM Filmer
Som du ser måste du också ge tillbaka fältnamnen med AS, annars är de fälten namnlösa. Detta innebär dock problem om du ska räkna med fält etc i din SQL-fråga. Du får inte göra CONCAT på fälten innan du räknar, utan endast på resultatet du skickar tillbaka. Skall du räkna med fältvärdena på asp-sidan får du komma ihåg att göra lämplig subtypskonvertering (exempelvis CDbl() i det här fallet). Så här kan din originalkod se ut (du får fylla på med fält du vill använda, i SELECT-frågan.):
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={mySQL};Server=xx;Database=xx;UID=xx;PWD=xx;option=16387"
Visa = "SELECT CONCAT(Poang, '') as Poang FROM Filmer WHERE ID=60"
Set RecSet = Connect.Execute(Visa)
%><%=RecSet("Poang")%><%
Set RecSet = Nothing
Set Connect = Nothing
%>
En annan lösning på problemet torde vara att gå över till PHP som skriptspråk, men det kanske inte är aktuellt? ;) Det bör fungera i PHP, som ansluter till MySQL på ett helt annat sätt.
Puh. Detta var jobbigt.
Återkom med frågor!
Mvh,
anders
Ja, det var sannerligen märkligt! Är detta något som Aleborg bör veta? Kan han göra något så det funkar problemfritt med en "vanlig" SQL-sträng?
Jag funderar allvarligt för att gå över till PHP! :) Men är det inte svårt att konvertera 40 sidor ASP-kod? :l
Jag vet inte hur jag skall kunna tacka dig Anders! Du är fantastisk! :f
koltrasten skrev:
Ja, det var sannerligen märkligt! Är detta något som Aleborg bör veta? Kan han göra något så det funkar problemfritt med en "vanlig" SQL-sträng?
Ja, han bör få veta detta. Jag ska försöka komma ihåg att ta upp detta med honom, men du kan ju skicka ett litet mail till honom med länk hit. Hänvisa till mig bara. ;)
koltrasten skrev:
Jag funderar allvarligt för att gå över till PHP! :) Men är det inte svårt att konvertera 40 sidor ASP-kod? :l
Det är inte helt enkelt att konvertera asp till php. Syntaxen skiljer sig mycket åt. Men, det är ju alltid kul att lära sig något nytt? :)
koltrasten skrev:
Jag vet inte hur jag skall kunna tacka dig Anders! Du är fantastisk! :f
:r :f
Mvh,
anders
Ja, han bör få veta detta. Jag ska försöka komma ihåg att ta upp detta med honom, men du kan ju skicka ett litet mail till honom med länk hit. Hänvisa till mig bara.
Fixat! :)
Det är inte helt enkelt att konvertera asp till php. Syntaxen skiljer sig mycket åt. Men, det är ju alltid kul att lära sig något nytt?
Jo, visst! :OO
Koderna består nästan enbart av databasöppningar, if-then-else, loopar och additionsberäkningar. Är just de momenten svåra? Finns det möjligtvis ett program som konverterar koden? :l
Tack och hej!