Daten enthalten ' (einfaches Hochkomma)

29/03/2008 - 17:08 von Wolfgang Woicke | Report spam
Hallo,

ich habe eine Access 11.0 Build 8166 - DB mit welcher ich Film-DVDs
verwalte. Wobei meines Erachtens die Access-Version keine Rolle spielt.

In der Tabelle [T Film] existiert auch ein Feld Schauspieler, in welche die
Name der mitwirkenden Schauspieler durch Semikolon getrennt eingetragen
werden. Ein Semikolon als Namensbestandteil ist mir nicht bekannt, deswegen
ist das Semikolon als Trennzeichen sehr gut geeignet.

Beim Aufruf eines eines Formulars wird das Feld [T Film].[Schauspieler]
ausgelesen und die Namen der Schauspieler in eine Tabelle [Personen]
geschrieben. Es wird der Wert jeweils zwischen zwischen zwei Semikolons als
Name gedeutet und bei Nichtvorhandensein in die Tabelle [Personen]
eingefügt. Dies klappt auch sehr gut.

Hier für Interessenten der entsprechende Quelltext

Dim rs As Object
Dim dbs As DAO.Database
Dim rse As Object
Dim dbse As DAO.Database
Dim strInsertName, _
strInsertNameG As Variant

Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("T Personen")
Set dbse = CurrentDb
Set rse = dbse.OpenRecordset("T Film")

rse.MoveFirst
Do
strInsertNameG = rse![Schauspieler]
If strInsertNameG <> "" Then
lngPos = InStr(1, strInsertNameG, strZ)
While lngPos > 0
strInsertName = Left(strInsertNameG, lngPos - 1)
strInsertNameG = Mid(strInsertNameG, lngPos + 2)
strSQL = "SELECT Personen, Schauspieler, [Key Personen] FROM [T
Personen] " _
& " WHERE [T Personen].[Personen] = '" &
strInsertName & "';"
Set rs = dbs.OpenRecordset(strSQL)
strSQL = "[Personen]"
rs.FindFirst strSQL & " = '" & strInsertName & "'"
If Not rs.EOF Then
rs.Edit
rs![Schauspieler] = rs![Schauspieler] + 1
rs.Update
lngKeyPerson = rs![Key Personen]
lngKeyFilm = rse![Key Film]
strSQL = "INSERT INTO [T Key Film <> Personen] ([Key Film],
[Key Personen], [Kategorie]) " _
& " VALUES (" &
lngKeyFilm & ", " & lngKeyPerson & " , 'Schauspieler');"
dbs.Execute strSQL, dbFailOnError
rs.Requery
Else
strSQL = "INSERT INTO [T Personen]
([Personen],[Schauspieler]) VALUES ('" & strInsertName & "', 1);"
dbs.Execute strSQL, dbFailOnError
rs.Requery
End If
lngPos = InStr(1, strInsertNameG, strZ)
Wend

strInsertName = strInsertNameG
strSQL = "SELECT Personen, Schauspieler, [Key Personen] FROM [T
Personen] " _
& " WHERE [T Personen].[Personen] = '" &
strInsertName & "';"
Set rs = dbs.OpenRecordset(strSQL)
strSQL = "[Personen]"
rs.FindFirst strSQL & " = '" & strInsertName & "'"
If Not rs.EOF Then
rs.Edit
rs![Schauspieler] = rs![Schauspieler] + 1
rs.Update
lngKeyPerson = rs![Key Personen]
lngKeyFilm = rse![Key Film]
strSQL = "INSERT INTO [T Key Film <> Personen] ([Key Film],
[Key Personen], [Kategorie]) " _
& " VALUES (" &
lngKeyFilm & ", " & lngKeyPerson & " , 'Schauspieler');"
dbs.Execute strSQL, dbFailOnError
rs.Requery
Else
strSQL = "INSERT INTO [T Personen] ([Personen],[Schauspieler])
VALUES ('" & strInsertName & "', 1);"
dbs.Execute strSQL, dbFailOnError
rs.Requery
End If
End If
rse.MoveNext
Loop While Not rse.EOF

Es wird auch noch gleichzeitig die Hàufigkeit des Auftreten gezàhlt. Dies
nur als Information über den sonstigen Code.

Jetzt aber mein Problem. Enthàlt ein Name ein ', beispielsweise Maureen
O'Hara, kommt es regelmàßig zu

Laufzeitfehler 3075
Syntaxfehler (fehlender Operator) in Abfrageausdruck '[T
Personen].[Personen] = 'O'Hara, Maureen';'.

So ersetze ich das Zeichen ' bei der Eingabe durch ein #. Ein Workaround,
welcher allerdings eine Namensverfàlschung bewirkt.

Hàtte jemand eine Idee bei der ich das ' (einfaches Hochkomma) im Namen
belassen kann?

Mit freundlichen Grüssen aus Berlin

Wolfgang Woicke
 

Lesen sie die antworten

#1 Gunter Avenius
29/03/2008 - 17:33 | Warnen spam
Hallo Wolfgang,

Wolfgang Woicke schrieb folgendes:
...
Jetzt aber mein Problem. Enthàlt ein Name ein ', beispielsweise Maureen
O'Hara, kommt es regelmàßig zu

Laufzeitfehler 3075
Syntaxfehler (fehlender Operator) in Abfrageausdruck '[T
Personen].[Personen] = 'O'Hara, Maureen';'.

So ersetze ich das Zeichen ' bei der Eingabe durch ein #. Ein Workaround,
welcher allerdings eine Namensverfàlschung bewirkt.

Hàtte jemand eine Idee bei der ich das ' (einfaches Hochkomma) im Namen
belassen kann?



Verdopple das Hochkomma.

strDeinText=Replace(strDeinText,"'","''")

Gruß
Gunter
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de

SQL Server-Entwickler-Konferenz: www.donkarl.com/?SEK
Sa/So 12./13.04.2008 und Sa/So 19./20.04.2008

Ähnliche fragen