Mellanslag i fältnamnet ger fel vid Update ef
Hejsan.
Har ett recordset i vilket det förekommer fält med och utan mellanslag.
Om jag lägger till en post i recordset'et och enbart förändrar fält vilket inte innehåller mellanslag fungerar det utan problem. Men om jag modifierar ett felt med mellanslag får jag ett fel vid Update.
I errors collectionen från connection objektet ligger tre fel. De två första saknar beskrivning. Men det tredje säjer något om OLDB Providern och multistep operation...
Uppskattar gärna hjälp... :o)
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Efter som SQL inte vet när ditt fältnamn tar slut så antar den att när ett mellanslag på träffas så är fältnamnet slut.
Alltså fungera inte följande:
SELECT Mitt Namn FROM Namn
För att lösa detta problem brukar man skriva _ som mellanslag, nu finns det ett sätt att specifisera vilket som är fältnamnet ändå fast du inte använt _.
SELECT [Mitt Namn] FROM Namn
Fungerar alldeles utmärkt. Det är dock att rekomender att skriva ihop sina fältnamn, inte använda svenska tecken eller använda resarverade ord så som Date, Time osv osv... Även om man kan lösa dessa problem med []
- Magnus
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Så du menar att jag explecit måste deklarera alla fältnam istället för att använda *?
Det "roliga" är att det fungera med access OLEDB provider. Men inte med SQL Servers. Antagligen en bugg i providern.
Ska testa ditt förslag.
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Tja om du använder * borde det fungera eftersom SQL själv hämtar namnen på fälten och då borde fixa till sådana missar.
Själv kör jag frågor mot databasen med hjälp av * där det finns hemska fält namn som [Line No.] hur man nu kan slänga med en punkt i ett fältnamn... och det fungerar bra.
Fast du skrev att du hade problem med Insert och update och där kan du inte använda * utan måste skriva fältnamnet för hand.
- Magnus
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Du missade att jag använder ett recordset. Det är när jag anropar update metoden på recordset'et felet inträffa. Och endast om jag redigerat ett fält med mellanslag i fältnamnet. Så det är en bugg i providern. Måste det nästan vara, eller?
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Det är det säkert!
Varför inte göra en vanlig SQL sats, betydligt snabbare, och så slipper du problemet.
- Magnus
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Egentligen så är det inte mitt projekt eller mitt problem. Ska mata in en massa data i SQL servern. Kan ju i loopen sammanfoga alla satser till en jätte stor sträng. Med det tar ju tid att skicka och tolka den. Så vilket är det mest effektiva sättet?
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
En INSERT / UPDATE är snabbare än att göra det via recordsetet eftersom du då måste skapa ditt recordset och sedan göra en koppling till en viss tabel och sedan updatera...
gör så här:
dim oConn as adodb.connection
set oConn as adodb.connection
oConn.open "DIN_KOPPLING"
sSQL = "INSERT INTO tabell_namn () VALUES()"
oConn.execute sSQL,,128
set oConn = nothing
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Tack för din insatts... Men...
Om testar att göra en loop med din kod. Alltså gör en execut med en INSERT och samma sak med ett recordset. Är recordset'et betydligt snabbare. Detta beror på att Execut skickar data till servern och väntar sedan på svar. Kan man lösa detta med att skicka det asynkront, eller slåsamman alla inserts tell en enorm sträng som man sedan skickar med en Execut?
I enstaka insert så är en Insert betydligt snabbare, det vet jag. Men det är mycke data som skall infogas från en loop.
Är inte så insatt i Bulk operationer. Någon som har en god insikt i dem?
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Jag tänkte precis föreslå det, men du 'hann precis' skriva det själv, allra sist i ditt meddelande. Använd bcp istället, du lär tjäna mycket tid och prestanda på det. Dessutom är det fördelaktigt rent loggmässigt också.
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Tror det är bulk operationer. Men hur funkar det?
Tror inte det går i min applikation efter som den också skall var kompatibel med Access...
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
OK, nej då är det ganska dödfött ja... :)
bcp = Bulk Copy Program
bcp används för att importera data i en textfil till SQL Server (eller exportera från SQL Server till en textfil) och är extremt mycket snabbare än att köra en mängd INSERT satser. Det är samma program som används av SQL Server utan att man ser det om man kör en BULK INSERT sats.
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
En textfil enligt nedan typ:
1;Christoffer;Hedgate;Apptus Technologies
2;Patrik;Löwendahl;Cornerstone
Följande kommando (i prompt alltså) kopierar in hela innehållet i en tabell i databasen:
bcp databasnamn.dbo.tabellnamn in "c:\datafil.txt" -t";" -S"servernamn" -U"användare" -P"lösenord"
I sin enklaste form.
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
oki.. så den kräver någon typ av fil ?? kan inte använda strängar eller arrayer på någont sätt ??? MSDN förklaringarna gillar filer iofs..
Svara
Sv: Mellanslag i fältnamnet ger fel vid Updat
Precis, den läser in en fil. I ett sånt här fall (med en stor uppdatering) skulle jag nog lagrat strängen/arrayen eller vad det var i en fil, och sedan kört in den i SQL Server med bcp.
Svara