AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit Select Statement
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Select Statement

Ein Thema von Kedariodakon · begonnen am 23. Jan 2006 · letzter Beitrag vom 23. Jan 2006
 
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Probleme mit Select Statement

  Alt 23. Jan 2006, 17:44
Moin,

was ich nicht so ganz verstehe ist der Zugriff. Warum über SQL Query Analyzer?

Naja, ich habe mal eine Prozedur auf dem Server angelegt...

SQL-Code:
CREATE PROCEDURE [LoadTree] (@Aparent INTEGER = NULL, @Aebene INTEGER = 0) AS

SET NOCOUNT ON

DECLARE @id INTEGER
DECLARE @bez VARCHAR(100)
DECLARE @zeilen CURSOR
DECLARE @ebene INTEGER

SET @ebene = @Aebene

IF @Aebene = 0 BEGIN
  CREATE TABLE ##temp (ID INTEGER, bez VARCHAR(100))
END

IF @Aparent IS NULL BEGIN
  SET @zeilen = CURSOR FOR
    SELECT id, bezeichnung
    FROM tabelle
    WHERE parent_id IS NULL
    ORDER BY parent_id, bezeichnung
END
ELSE BEGIN
  SET @zeilen = CURSOR FOR
    SELECT id, bezeichnung
    FROM tabelle
    WHERE parent_id = @Aparent
    ORDER BY parent_id, bezeichnung
END

OPEN @zeilen
FETCH NEXT FROM @zeilen INTO @id, @bez
WHILE @@FETCH_STATUS = 0 BEGIN
  INSERT ##temp VALUES (@id, @bez)
  SET @ebene = @ebene + 1
  EXEC loadtree @id, @ebene
  FETCH NEXT FROM @zeilen INTO @id, @bez
END
CLOSE @zeilen
DEALLOCATE @zeilen

IF @Aebene = 0 BEGIN
  SELECT *
  FROM ##temp
  DROP TABLE ##temp
END

SET NOCOUNT OFF
Aufruf im SQL Query Analyzer:
EXEC LoadTree oder wenn ein Unterbaum geladen werden soll...
EXEC LoadTree 1 1 steht hier für: zeige alle Elemente die die ParentID = 1 haben und deren Unterelemente.

In Delphi würde das folgendermaßen aussehen (Zugriff über DBExpress)...

Delphi-Quellcode:
procedure TForm.LoadTree(ATree: TTreeView;
                         ASQLConnection:TCRSQLConnection;
                         ANode:TTreeNode;
                         AStream:TMemoryStream;
                         AID: integer);
var SDS:TSimpleDataSet;
    Stream:TMemoryStream;
begin
  Stream:=nil;
  try
    if not assigned(AStream) then
      Stream:=TMemoryStream.Create
    else
      Stream:=AStream;

    SDS:=TSimpleDataSet.Create(Self);
    try
      SDS.Connection:=ASQLConnection;
      SDS.DataSet.CommandText:=
        'SELECT *'#13 +
        'FROM tabelle'#13 +
        'ORDER BY parent_id, bezeichnung';

      if not assigned(AStream) then
        SDS.SaveToStream(Stream, dfXMLUTF8);

      SDS.LoadFromStream(Stream);
      SDS.Filtered:=false;
      if AID >= 0 then
        SDS.Filter:='parent_id = '+inttostr(AID)
      else
        SDS.Filter:='parent_id IS NULL';
      SDS.Filtered:=true;
      SDS.First;
      while not SDS.Eof do begin
        LoadTree(
          ATree,
          ASQLConnection,
          ATree.Items.AddChild(ANode, SDS.FieldByName('bezeichnung').AsString),
          Stream,
          SDS.FieldByName('id').AsInteger
        );
        SDS.Next;
      end;
    finally
      SDS.free;
    end;
  finally
    if not assigned(AStream) and assigned(Stream) then
      Stream.free;
  end;
end;
Aufruf:
  LoadTree(TreeView, SQLConnection); MfG
Thorsten
  Mit Zitat antworten Zitat
 


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 09:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz