webForumDet fria alternativet

Byta ut ett tecken mitt i text!

Databaser & SQLur Databashanterare & SQL

12 svar · 452 visningar · startad av Lasp

LaspMedlem sedan juli 200012 980 inlägg
#1

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?

PeeerMedlem sedan mars 20025 907 inlägg
#2

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

LarsGMedlem sedan dec. 200012 464 inlägg
#3
update ini set car14 = replace(car14,'1','0')
where car14 like 'EnrFaktura%'
and progr = 'Car200'
LaspMedlem sedan juli 200012 980 inlägg
#4

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?

LaspMedlem sedan juli 200012 980 inlägg
#5

Så här ser en dump ut:

select_from_ini.gif
LarsGMedlem sedan dec. 200012 464 inlägg
#6

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'
LaspMedlem sedan juli 200012 980 inlägg
#7

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.

LaspMedlem sedan juli 200012 980 inlägg
#8

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.

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Då skall det inte vara något problem med att använda replace. (Jag testade till och med.)

LaspMedlem sedan juli 200012 980 inlägg
#10

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

LarsGMedlem sedan dec. 200012 464 inlägg
#11

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'
LaspMedlem sedan juli 200012 980 inlägg
#12

Felmess! Konstigt nog på svenska!!
"Argumentdatatypen ntext är ogiltig för argument1 i funktionen replace."

LarsGMedlem sedan dec. 200012 464 inlägg
#13

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.

132 ms totalt · 3 externa anrop · v20260731065814-full.363dfaf6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)