AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ODBC Verbindung innerhalb des MSSQL Servers aufbauen
Thema durchsuchen
Ansicht
Themen-Optionen

ODBC Verbindung innerhalb des MSSQL Servers aufbauen

Ein Thema von Jelly · begonnen am 14. Nov 2007 · letzter Beitrag vom 14. Nov 2007
Antwort Antwort
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

ODBC Verbindung innerhalb des MSSQL Servers aufbauen

  Alt 14. Nov 2007, 09:21
Datenbank: MSSQO • Version: 2000 • Zugriff über: ADO.NET
Wir haben hier das Problem, dass mit 2 Serversystem gearbeitet wird: Einer IBM AS400 Machine und einem MSSQL Server. Bevor alles auf den SQL Server migriert ist, haben wir hier teilweise ein Misch an Informationen in den beiden Systemen.

Für meinen konkreten Fall muss ich innerhalb vom SQL Server (Stored Procedure oder Funktion, egal), auf eine 'Tabelle' der AS400 lesend zugreifen. Wir haben einen ODBC Treiber für die AS400, die die Verbindung über ADO.NET klappt aus C# heraus.

Kann der SQL Server dieser ODBC irgendwie intern auch nutzen. Ich möchte letzten Endes über einen Befehl, den ich an den SQL Server schicken, Daten vom AS400 erhalten.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen

  Alt 14. Nov 2007, 10:35
Zitat von Jelly:
Kann der SQL Server dieser ODBC irgendwie intern auch nutzen. Ich möchte letzten Endes über einen Befehl, den ich an den SQL Server schicken, Daten vom AS400 erhalten.
Ja, das geht.
Man muss im Enterprise Manager unter Sicherheit->Verbindungsserver einen neuen Eintrag vornehmen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen

  Alt 14. Nov 2007, 11:09
Danke shmia,

hab jetzt eine Lösung direkt über T-SQL gesucht, und auch schon fast zufriedenstellend gefunden... Das Stichwort heisst spAddLinkedServer:

Folgendes SQL Skript klappt schon mal fast:
SQL-Code:
EXEC sp_addlinkedserver
   @server = 'Servername',
   @srvproduct = 'AS400 Client Access',
   @provider = 'MSDASQL',
   @provstr = 'Driver={iSeries Access ODBC Driver};SYSTEM=AS400;CMT=0;DBQ=DBNAME_ON_AS400;NAM=0;DFT=5;DSP=1;TFT=0;TSP=0;DEC=0;XDYNAMIC=0;RECBLOCK=2;BLOCKSIZE=32;SCROLLABLE=0;TRANSLATE=0;LAZYCLOSE=1;LIBVIEW=0;REMARKS=0;CONNTYPE=0;SORTTYPE=0;PREFETCH=0;DFTPKGLIB=QGPL;LANGUAGEID=ENU;SORTWEIGHT=0;MAXFIELDLEN=32;COMPRESSION=0;ALLOWUNSCHAR=0;SEARCHPATTERN=1;MGDSN=0'

EXEC sp_serveroption
   @server = 'DBNAME_ON_AS400',
   @optname = 'data access',
   @optvalue = TRUE

EXEC sp_addlinkedsrvlogin
  @rmtsrvname = 'DBNAME_ON_AS400',
  @useself = false,
  @rmtuser = 'username',
  @rmtpassword = 'password'
Führe ich allerdings ein Select aus. z.B. über:
select m.* from OpenQuery(DBNAME_ON_AS400, 'select * from Medecinn order by nommed') m kriege ich zwar Records angezeigt, ABER NICHT ALLE

Ich geh mal von irgendwelchen Cache Problemen aus, hab aber keine Ahnung wo ich da angreifen könnte...

Jemand noch eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: ODBC Verbindung innerhalb des MSSQL Servers aufbauen

  Alt 14. Nov 2007, 11:42
Viiiiel googeln löste dann plötzlich mein Problem...

Es lag am Connectionstring, den ich im Parameter @provstr bei sp_addlinkedserver übergebe. Ist wohl ein AS400 typisches Problem. Durch Setzen von BLOCKSIZE=0 (anstatt 32 = 32kB) werden ALLE Zeilen zurückgeliefert...

Hier nochmals das Ganze vervollständigt:

SQL-Code:
EXEC sp_addlinkedserver
   @server = 'Servername',
   @srvproduct = 'AS400 Client Access',
   @provider = 'MSDASQL',
   @provstr = 'Driver={iSeries Access ODBC Driver};SYSTEM=AS400;CMT=0;DBQ=DBNAME_ON_AS400;NAM=0;DFT=5;DSP=1;TFT=0;TSP=0;DEC=0;XDYNAMIC=0;RECBLOCK=2;BLOCKSIZE=0;SCROLLABLE=0;TRANSLATE=0;LAZYCLOSE=1;LIBVIEW=0;REMARKS=0;CONNTYPE=0;SORTTYPE=0;PREFETCH=0;DFTPKGLIB=QGPL;LANGUAGEID=ENU;SORTWEIGHT=0;MAXFIELDLEN=32;COMPRESSION=0;ALLOWUNSCHAR=0;SEARCHPATTERN=1;MGDSN=0'

EXEC sp_serveroption
   @server = 'DBNAME_ON_AS400',
   @optname = 'data access',
   @optvalue = TRUE

EXEC sp_addlinkedsrvlogin
  @rmtsrvname = 'DBNAME_ON_AS400',
  @useself = false,
  @rmtuser = 'username',
  @rmtpassword = 'password'
Abfragen kann man das Ganze dann mit
select m.* from OpenQuery(DBNAME_ON_AS400, 'select * from Medecinn order by nommed') m
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz