AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Daten übergabe

Ein Thema von ledoerr · begonnen am 20. Jul 2005 · letzter Beitrag vom 21. Jul 2005
Antwort Antwort
ledoerr

Registriert seit: 29. Jan 2004
15 Beiträge
 
#1

ADO Daten übergabe

  Alt 20. Jul 2005, 20:57
Datenbank: MSSQL Server • Zugriff über: gerne ADO
Hallo zusammen

ich möchte gerne eine SOAP server-anwendung schreiben welche mir informationen aus einer SQL-tabelle geben soll.

die procedure sollten etwa so aussehen:

Delphi-Quellcode:
function TSQLService.GetMWSt(const SQLString: Double): (irgendeine Variable);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SQLString);
ADOQuery1.Open;

// Daten übergabe

end;
hat irgend jemand eine idee wie ich diese daten übergeben kann?

vielen danken im voraus
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: ADO Daten übergabe

  Alt 20. Jul 2005, 22:20
Da gibt es mehrere Varianten. Zwei davon möchte ich ich kurz anschneiden.

Die Erste Variante kannst du nutzen ohne Änderunegn an der DB zu machen:

Rufe die Funktion wie folgt auf:

Delphi-Quellcode:
  MwSTValue:=GetMWSt('SELECT MwST FROM Position WHERE PosNr=1313' );
  case MwStValue of
    -1: ShowMessage('Die Abfrage liefert keine Rückgabemenge');
    -2: ShowMessage('Die Abfrage liefert mehr als einen Datensatz');
    -3: ShowMessage('Die Abfrage einen ungültigen Wert für MwSt');
  end;

  if MwStValue<0 then exit;

  ...
  ...
Die AdoQuery liefert also nur eine Spalte mit dem Namen MwST zurück ...
Daher kannst du die function wie folgt umbauen

Delphi-Quellcode:
function TSQLService.GetMWSt(SQLString:String): Double;
  var t:Variant;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.text(SQLString);
  ADOQuery1.Open;
  
  // Rückgabe der Query rrüfen
   
  case AdoQuery1.RecordCount of
    1: t:=AdoQuery1.FieldValues['MwSt'] ; // Nimm den Wert aus dem Feld
    0: t:=-1 ; // SELECT verweist auf keinen Datensatz, "Kennung -1"
    2..999999999999999: t:=-2 // SELECT verweist nicht eindeutig auf einen Datensatz "Kennung -2"
  end;

  AdoQuery1.close;

  // Inhalt von "t" prüfen

  if VarType(t) <>VarNULL
  begin
    if not TryStrToFloat(t) then t:=-3 ; // -3 = Kennung für ungültigen Wert
  end
  else begin
    t:=-3;
  end;

  result:=t;

end;
-----------------------------------------------------------------------------------------

Variante 2 halte ich für wesenflich besser, weil fest codierter SQL Code fast immer ein Klotz am Bein ist.
Ausserdem möhlt man sich das Projekt unnötig mit Komponenten voll und eine SP kann man auch mal schmell beim Kunden umstricken, falls dieser mal wieder Sonderwünsche hat ...


Baue die auf dem SQL-Server eine SP
z.B.

SQL-Code:
CREATE PROCEDURE dbo.GetPositionMwSt
  @PosNr INT = NULL,
  @MwSt DECIMAL = NULL OUTPUT;
AS
BEGIN

  IF @PosNr IS NULL
  BEGIN
    SET @MwSt = -1 -- Kennung für "kein Datensatz"
    RAISERROR('Die SP muss mit einer Positionsnummer aufgerufen werden !',16,1,'SQL')
  END
  ELSE BEGIN
    SELECT @MwSt = MwSt From Positionen WHERE PosNr = @PosNr
    IF @MwSt IS NULL SET @MwST = -3 -- Kennung für "ungültiger Wert"
    IF @@RECORDCOUNT = 0 SET @MwST = -1 -- Kennung für "kein Datensatz"
    IF @@RECORDCOUNT > 1 SET @MwST = -2 -- Kennung für "zu viele Datensätze"
  END

END;
In Delphi würde ich das dann so aufrufen

Delphi-Quellcode:
function TSQLService.GetMWSt(PosNr:Integer): Double;
  var SP:TAdoStoredProc;
begin
  SP:=TAdoStoredProc.create(self);
  SP.Connection:=Datamodule1.AdoConnection1; // Hier deine AdoConn
  try
    SP.Procedurename:='GetPositionMwSt';
    SP.Parameters.refresh;
    SP.Parameters[1].Value:=PosNr;
    SP.ExecProc;

    Result:=SP:Parameters[2].Value;

  finally
    FreeAndNil(SP);
  end;

Hoffe es hilft,

Schöne Grüße,
Jens

  Mit Zitat antworten Zitat
ledoerr

Registriert seit: 29. Jan 2004
15 Beiträge
 
#3

Re: ADO Daten übergabe

  Alt 21. Jul 2005, 11:49
mh das ist nicht ganz das was ich brauchen.

Das resultat muss alle zeilen enthalten die ich abgefragt habe.

also ich gebe den SQL string an die Procedure und erhalte nachher eine Variable die ich als liste Darstellen kann.

danke aber für die Idee
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: ADO Daten übergabe

  Alt 21. Jul 2005, 11:56
Dann also eher Sowas ?

Delphi-Quellcode:
Function irgendwas():TStrings;
begin
  
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.text:='SELECT MWST FROM TABELLE1 WHERE...';
  ADOQuery1.Open;

  MeineListe.Clear;
  While not ADOQuery1.eof do
  begin
    MeineListe.add(ADOQuery1.fieldbyname('MWST').asstring;
    ADOQuery1.next;
  end;

  Result:=MeineListe;
end
;
  Mit Zitat antworten Zitat
ledoerr

Registriert seit: 29. Jan 2004
15 Beiträge
 
#5

Re: ADO Daten übergabe

  Alt 21. Jul 2005, 12:07
Jetzt nur noch unbekannt viele spalten weil die abfragen dynamisch sein können.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: ADO Daten übergabe

  Alt 21. Jul 2005, 13:44
Dann kannst du das eventuell so machen (Kanns grade nicht testen ...)

myArray = mehrdimensionales DynArray, Eine TObjectlist oder was du gern verwendest

Delphi-Quellcode:
  While not ADOQuery1.eof do
  begin
    for i:=0 to AdoQuery1.fields.count.1 do
    begin
       MyArrAy[AdoQuery1.recno-1,i] := AdoQuery1.fields[i].asstring;
    end;
    ADOQuery1.next;
  end;
  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 12:03 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