Entwickler-Ecke

Sonstiges (FPC / Lazarus) / Linux API - MS-SQL, ZEOS, Typecasting


icho2099 - Mi 29.09.21 18:59
Titel: MS-SQL, ZEOS, Typecasting
Hallo, ich habe einen Knoten im Hirn, den ihr sicher ganz leicht lösen könnt.

Möchte auf einem MSSQL Server Geodaten ablegen und dazu dies verwenden:

SQL-Anweisung
1:
2:
3:
INSERT INTO [JP].[dbo].[F0116_EXT]
( [LOC], [AN8])
VALUES ( geography::STPointFromText( 'POINT(3.1172070745378733 39.808602472767234)'4326) , 99999993 )


Mit dem Mangement Studio kein Problem, wird fehlerfrei ausgeführt.

Aber wenn ich jetzt einer Zeos Query (Connection ist ADO) versuche das als SQL.Text ausführen zu lassen,
dann hagelt es Fehlermeldungen. Angemeckert wird, das der String-Parameter für STPointFromText(), also das 'POINT(x , y)' ungültig sei.
Habe auch versucht den ganzen String als Parameter zu übergeben, funktioniert nicht.
Auch nur den POINT(x , y) teil als Parameter.AsString funktioniert nicht.
Alles in SQL.Text mit verdoppelten Hochkommata (ist das gendergerecht geschrieben) funktioniert auch nicht.
Letztendlich würde ich gerne die beiden Koordinaten und die ID (AN8) als Parameter der Query übergeben.


Hat jemand eine Entknotung bitte ???


Ralf Jansen - Mi 29.09.21 20:04

Hab Zweifel das ADO überhaupt UDTs kann. Die letzte Version von ADO fällt ziemlich genau zusammen mit dem Zeitpunkt als der SQL Server user defined types für sich erfunden hat also so ungefähr 2005/2006. (und geography ist ein user defined type auch wenn Microsoft den mitliefert).

Scheinbar kann man aber im connection string mitgeben das Udts richtig gemappt werden. Vielleicht hilft das.
Sollte eigentlich nur hilfreich sein wenn man Parameter verwendet aber wer weiß was ZEOS anstellt bevor es die Query zum Server schickt.

https://www.connectionstrings.com/ole-db-driver-for-sql-server/ado-with-new-data-types/


icho2099 - Fr 01.10.21 14:11

Deine Zweifel sind wohl berechtigt, hatte zumindest keinen Erfolg...

Habe jetzt einen Work-Around mit einer stored procedure, ist zwar etwas umständlicher,
funktioniert aber (erstmal)