# Problem mit SQL UPDATE Abfrage



## daywalkertp (24. Juli 2003)

Meine Abfrage Sieht so aus:

```
UPDATE Adressen SET Firmenzusatz = 'EDV', Anrede = 'Herr', Nachname = 'Merkel', Straße = NULL, PLZ = '72108', Ort = 'Rottenburg', Tel_Nummer = '07472 - 8242', Fax_Nummer = NULL, Handy_Nummer = '0174 - 9893708', Privat = NULL, Anmerkung = NULL, [e-Mail] = NULL WHERE Index LIKE '19118'
```
Dabei erhalte ich volgenden Fehler:

```
Microsoft OLE DB Provider for ODBC Drivers- Fehler '80040e10' 

[Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
```

...ich verstehe einfach nicht was er hat. Meine Datenbankstruktur sieht so aus:

```
Index        |AutoWert
Firma        |Zahl
Firmenzusatz |Text
Anrede       |Text
Nachname     |Text
Straße       |Text
PLZ          |Text
Ort          |Text
Tel_Nummer   |Text
Fax_Nummer   |Text
Handy        |Text
Privat       |Text
e-Mail       |Text
Anmerkung    |Memo
```

An was kann es liegen?


----------



## Prijv (25. Juli 2003)

versuch mal bei e-Mail ein e_Mail drausszumachen. kommt zwar auf den DB typ an aber versuch ists wert.


----------



## hikeda_ya (22. März 2006)

hallo zusammen ich hab da auch ein kleines problem.

ich habe in einer Adress-Tabelle Daten von einer CD runter gezogen und eingespielt in SQL.

Da ja SQL " als Text-Anfang -Ende erkennt musste ich die " ändern in + 

jetzt will ich gerne in der SQL Tabelle gerne wieder die " haben. damit wieder steht:

Arbeitsgruppe "unter uns"   

und nicht wie aktuell:

Arbeitsgruppe +unter uns+

ich bekomme bei folgender abgrage:

```
UPDATE Adressen SET [Name] = '"'
WHERE [Name] = '+'
```

folgende fehlermeldung



> Server: Nachr.-Nr. 306, Schweregrad 16, Status 1, Zeile 1
> Die Datentypen text, ntext und image können nur mithilfe des Operators IS NULL oder LIKE verglichen oder sortiert werden.



die Spalte "Name" ist logischerweisse als TXT hinterlegt.

und bei 

```
UPDATE Adressen SET [Name] like '"'
WHERE [Name] like '+'
```

erhalte ich 



> Server: Nachr.-Nr. 156, Schweregrad 15, Status 1, Zeile 1
> Falsche Syntax in der Nähe des like-Schlüsselwortes.


----------



## hikeda_ya (22. März 2006)

habs selbst gefunden


```
UPDATE Adressen SET [Name] = '"'
WHERE [Name] like '%+%'
```


----------



## hikeda_ya (22. März 2006)

ich habe noch einen fehler

wie kann ich nur ein zeichen in der feld ändern so das der rest des textes erhalten bleib?


----------



## Ceppi (22. März 2006)

Ich weiß zwar derzeit nicht, mit welchem Datenbanksystem du arbeitest, aber MySQL z.B. hat dafür die üblichen Stringfunktionen (Ersetzen, Teilstring etc.), die man dafür einsetzen kann. 

```
UPDATE tabelle SET spalte = REPLACE('abc','ABC',spalte) WHERE id=1;
```

EDIT: richtige Argumentreihenfolge für REPLACE: spalte,'abc','ABC'


----------



## hikeda_ya (22. März 2006)

ich arbeite mit ms sql

und ich bin recht neu - daher verzei mir bitte das ich mit deiner antwort noch nicht viel anfangen kann


----------



## Ceppi (23. März 2006)

Wie ich gerade gesehen habe, ist meine Argumentreihenfolge für REPLACE falsch --
es müsste heißen

```
REPLACE(spalte,'suchstring','ersatzstring')
```

Ein weiteres Thema dazu kanst du z.B. hier anlesen. Oder einfach mal nach 'update' und 'replace' zusammen suchen...

REPLACE ersetzt im ersten Argument das zweite Argument durch das dritte (wenn vorhanden).


----------



## hikeda_ya (23. März 2006)

ok danke 

nur so für mein verständniss

wenn ich jetzt eine spalte mit mehreren ansprechpartner habe bei denen auch die anrede mit dabei ist kann ich zum beispiel die ersten 4 zeichen mit dem replace ändern

ich versuche mal den sql code zu kreiren


```
update tabelle
set field = replace (field, ausdruck, neuer_ausdruck)
left([feldname];5)
where [feldname] like 'Herr %'
```


----------



## hikeda_ya (24. März 2006)

ich hab es zwar geschaft das MS SQL die datensätze ausliest aber er aktualisiert sie nicht


```
select zwischen.geschäftsführer from zwischen
where Geschäftsführer like'Herr%' and not Geschäftsführer like '% Herr%'
select replace ('Herr ','Herr ','')
```

auszug aus der spalte



> Herr Egon Haydn; Frau Hildegard Schopper
> Herr Ernst Bachleitner; Frau Vera Bachleitner-Tandl; Frau Brigitta Haratzmüller
> Herr Peter Lukschal; Frau Anna Lukschal


----------



## hikeda_ya (24. März 2006)

ich bin in zwischen so weit


```
UPDATE zwischen
  SET geschäftsführer = REPLACE('Herr ', 'Herr ' ,'');
```

doch dabei ersetzt er mir das ganze feld und nicht nur das "Herr "


----------



## Ceppi (24. März 2006)

Du musst ja auch die Spalte angeben, mit dessen Wert gearbeitet werden soll. Derzeit hast du dafür einen String angegeben ('Herr '). Bei deinem Beispiel müsstest du folgenden Query absetzen:

```
UPDATE zwischen
  SET geschäftsführer = REPLACE(geschäftsführer, 'Herr ' ,'');
```


----------



## hikeda_ya (24. März 2006)

dann erhalte ich immer folgende fehlermeldung


```
Server: Nachr.-Nr. 8116, Schweregrad 16, Status 1, Zeile 1
Der Argumentdatentyp text ist für das Argument 1 der replace-Funktion ungültig.
```

und wenn ich es anders rumm mache dann wird immer die komplette spalte gelöscht - ich komm einfach nicht weiter


----------



## hikeda_ya (24. März 2006)

ok lag an der spaltenformation - habe text verwendet und nicht varchar


----------

