Tror inte det går (fast man har ju haft fel förut)! Det enklaste är nog att läsa av hela fältet, ändra värdet i programkoden och sen updatera posten i databasen igen.
/r ... man har ju fel igen :e
12 svar · 452 visningar · startad av Lasp
Jag har slängt in de gamla .Ini filerna i en tabell som heter just Ini.
Där har jag tre kolumner, först Progr som skall vara "Car2000", sedan Sign som är "!MM"
samt ett blobfält Ntext som heter ini, där det kan se ut som följer:
Det ligger alltså ett
Utdrag ur Car 14
[Params]
ObjKalTimer=60
Db=PROVIDER=SQLOLEDB.1;Integrated......
LastLogin=Lennart Aspenryd
EnrInterna=1
EnrFaktura=1
EnrKontoK=0
EnrKontant=0
KmKontroll=0
....
Om jag nu vill ändra värdet på EnrFaktura från 1 till 0 !
Hur ser en sådan SQL fråga ut?
Tror inte det går (fast man har ju haft fel förut)! Det enklaste är nog att läsa av hela fältet, ändra värdet i programkoden och sen updatera posten i databasen igen.
/r ... man har ju fel igen :e
update ini set car14 = replace(car14,'1','0')
where car14 like 'EnrFaktura%'
and progr = 'Car200'
Ser bra ut men jag får "Fel i SQL Sträng"
Om man börjar med att plocka ut nuvarande värde för kontroll, hur skulle det se ut?
Så här ser en dump ut:
Access? Äldre version? Har för mig att nya versioner av Access har stöd för funktionen replace.
Det borde gå att lösa med mid/instr också. Hur pass specifik är denna funktion? Dvs, vill du kunna uppdatera flera värden eller gäller det enbart EnrFaktura. Om det är det senare fallet
update ini set car14 = 'EnrFaktura=0'
where car14 like 'EnrFaktura=1'
and progr = 'Car200'
Nej det är en MS SQL db Skärmdumpen är gjord med DbaMgr2 och anledning är att jag vill att användarna skall kunna ändra ett specifikt värde. Jag kommer att bygga ett underhållsgränssnitt så småningom. Just i detta fall skall Prog vara "Car2000" och Sign "!MM" sedan ligger hela raddan av värdefält på det sättet som jag skrev i första inlägget. Jag kanske skall ordna detta med underhåll, men jag vet att jag har gjort ett databasdesignfel så jag vill ju gärna bygga om det hela först.
jag kör denna fråga
select * from ini where prog='car2000'
då ser resultatet ut så här:
Prog;Signr;Ini;
Car2000;!MM;[Params]
ObjKalTimer=60
Db=PROVIDER=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Car14;Data Source=ASKEN
LastLogin=Lennart Aspenryd
EnrInterna=1
EnrFaktura=1
EnrKontoK=0
EnrKontant=0
KmKontroll=0
CheckOrgNr=1
CheckPnr=1
Language=Swe
dg_timer=5
CustCompanyTimer=0
Custnote=1
SDB=PROVIDER=SQLOLEDB.1;User ID=sa;Password=system;Persist Security Info=False;Initial Catalog=Car_Stat;Data Source=xxxx
Skrivare=hp deskjet 990c series
[Setup]
rptDirectory=C:\Program\Car2000\Rapporter\
Preview=1
MomsCountConst=2
DefaultCDR=1
PaymentOnBooking=1
;
Då är det enskilda värden som jag vill komma åt att ändra.
Då skall det inte vara något problem med att använda replace. (Jag testade till och med.)
OK Jag får det inte att fungera. Den (SQLsatsen) säger ogiltigt kolumnnamn Car14. Jag tog den första satsen du skrev LarsG. :birp :P
Då blev det missförstånd med kolumnnamn
update ini set ini = replace(ini,'EnrFaktura=1','EnrFaktura=0')
where ini like '%EnrFaktura=0%'
and prog = 'Car200'
and signr = '!MM'
Felmess! Konstigt nog på svenska!!
"Argumentdatatypen ntext är ogiltig för argument1 i funktionen replace."
Kan du byta typ till nvarchar? Den har en maxlängd på 4000 tecken och då skall replace fungera. Om det inte går att byta datatyp så ser jag inget alternativ till att hämta upp värdet, förädra det och stoppa tillbaks det.