[WinCC flex] Datentyp Bool in WinCC flex <> Bit MS SQL Server

Locke_

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich versuche einen boolschen Wert (WinCC flexible - interne Variable) in eine MS SQL Datenbank in eine Spalte von Typ Bit zu schreiben. Nur leider scheinen diese nicht kompatibel zu sein.
Ich erhalte folgende Fehlermeldung:

-2147217913 "Fehler beim Konverieren des varchar-Wertes 'Falsch' in den bit-Datentyp."

Scheinbar behandelt WinCC flexible Boolsche Werte mit "WAHR" und "FALSCH", was MS SQL als varchar interpretiert. Gibt es eine einfache Möglichkeit, diese Werte in die bit-Werte 0 und 1 zu wandeln/konverieren? Vielleicht irgendwelche Optionen in WinCC flexible? Oder hat einer eine Idee, wie man das sonst lösen könnte?

WinCC flexible 2005 SP1 HF7
MS SQL Server 2005 Workgroup

Vielen Dank für euere Hilfe
Locke_
 
Oder hat einer eine Idee, wie man das sonst lösen könnte?
Wenn es mit WinCC flexible nicht geht, dann könntest Du einen View auf die Tabelle anlegen, und diesem View einen "Instead of Insert, Update" - Trigger verpassen. Wenn Du dann von WinCC aus in den View statt in die Tabelle schreibst, dann kannst Du in dem Trigger die Werte im SQL-Server manipulieren, bevor Du sie dann letztendlich aus dem Trigger heraus in die Tabelle schreibst.

Gruß Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für Deine Antwort

Momentan sieht mein Script so aus:

Connection.Execute("UPDATE reels SET perforation = '"&Reel_Perforation&"' WHERE id = '"&Reel_ID&"';")
If Err.Number <> 0 Then
SmartTags("ErrorNo") = Err.Number
SmartTags("ErrorReport") = Err.Description
Err.Clear
End If

Wobei "Reel_Perforation" eine WinCC interne Variable vom Typ Bool und "perforation" eine MS SQL Server 2005 DB-Spalte vom Typ BIT ist.

Wie das mit der View gehen soll, ist mir nicht so ganz klar, da noch ziemlich neu auf dem Gebiet.

Viele Grüsse
Locke_
 
Momentan sieht mein Script so aus:

Connection.Execute("UPDATE reels SET perforation = '"&Reel_Perforation&"' WHERE id = '"&Reel_ID&"';")
If Err.Number <> 0 Then
SmartTags("ErrorNo") = Err.Number
SmartTags("ErrorReport") = Err.Description
Err.Clear
End If
In dem Fall kannst Du den View vergessen, so geht's deutlich einfacher:

Code:
Connection.Execute("UPDATE reels SET perforation = Case when '"&Reel_Perforation&"' = 'Wahr' then 1 else 0 end WHERE id = '"&Reel_ID&"';")
WinCC Flexible sollte das IMHO eigentlich auch können, ist aber nicht mein Fachgebiet ... ;)


Gruß Axel
 
Zurück
Oben