AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Spalte anhängen in DBGRID
Thema durchsuchen
Ansicht
Themen-Optionen

Spalte anhängen in DBGRID

Ein Thema von fly_singapore · begonnen am 4. Mai 2007 · letzter Beitrag vom 4. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#1

Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 12:17
Datenbank: MS-SQL • Version: 2000 • Zugriff über: ODBC
Hallo Allerseits,

leider habe ich folgendes Problem: Einem DBGrid soll eine weitere Spalte drangehangen werden. Diese soll jedoch nicht
direkt aus der Query bzw. aus Datasource gefüllt werden, sondern quasi einen bestimmten Wert abbilden, der sich aus Bedingungen aus anderen Spalten ergibt. Ich arbeite hier mit einen MS-SQL-Server.

In ACCESS habe dich das mit einen SQL-Statement lösen können:

SQL-Code:

SELECT *, IIF(spalte = Bedingung, "Tue dieses", "Tue jenes") as NeueSpalte FROM tbl
Leider funktioniert dieser String nicht in Delphi, so dass ich mir was anderes einfallen lassen muss.

Vielleicht gibt es unter Euch einen MS-SQL Spezialisten
Peter Steffens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 12:20
Schau dir mal die CASE-Funktion des MSSQL-Servers an.
Markus Kinzler
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 12:21
Du kannst Deiner Datenquelle mit dem Feld-Editor (per Doppelklick auf die Datenquelle aufrufbar) ein berechnetes Feld zufügen, das Du dann auch im DBGrid darstellen kannst.
  Mit Zitat antworten Zitat
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 12:33
@mkienzler

CASE habe ich auch schon Probiert, funktioniert aber auch nicht .. Immer wenn ich einen Vergleich mit = einsetze, fängt er mit einen Syntaxfehler 'in der Nähe von '0' an..


@daddy


Eine zusätzliche Spalte konnte ich mittels Doppelclick auf das DBGrid und durch "Hinzufügen" anlegen. In der Liste erschien dann eine Spalte nahmens TColumn. Wenn ich auf diese Spalte zugriff hätte, dann wäre das kein grosses Problem. Jetzt bin ich aber in der Objekt-orientierten Programmierung nicht so fit.
Peter Steffens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 12:52
Zeig mal deine Abfrage und beachte die richtige Schreibweise meines Namens
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 13:05
Hallo,

um relationale Operatoren verwenden zu können musst du die komplexe Syntax von CASE verwenden:

SQL-Code:
SELECT test = CASE
    WHEN test = 0 THEN 'Null'
    ELSE test
  END
FROM ...
Freundliche Grüße
  Mit Zitat antworten Zitat
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 13:10
@mkinzler

(soll auch nie mehr wieder vorkommen, Ehrenwort !!! )

Hier mein originaler Code, allerdings unter Verwendung der IIF-Funktion.

Delphi-Quellcode:

cSQL_tblMIG := 'SELECT * ';

     cSQL_tblMIG := cSQL_tblMIG + ', iif (bereich_alt = ' + QuotedStr(CGruppe) ;
     cSQL_tblMIG := cSQL_tblMIG + ' AND region_alt = ' + QuotedStr(cRegion) ;

     cSQL_tblMIG := cSQL_tblMIG + ', ' ;
     cSQL_tblMIG := cSQL_tblMIG + QuotedStr('AB') + ', ' + QuotedStr('AN') + ') AS ABAN ';

     cSQL_tblMIG := cSQL_tblMIG + ' FROM tbl_mig '    ;


     cSQL_tblMIG := cSQL_tblMIG + 'WHERE (WiW = '        + QuotedStr(cAnmeldenamen) + ') ';
     cSQL_tblMIG := cSQL_tblMIG + 'OR (WiW_2 = '         + QuotedStr(cAnmeldenamen) + ') ';
     cSQL_tblMIG := cSQL_tblMIG + 'OR (WiW_Vertreter = ' + QuotedStr(cAnmeldenamen) + ') ';
     cSQL_tblMIG := cSQL_tblMIG + 'ORDER BY GPNR ';
     datenbankform.query_migration.close;
     datenbankform.query_migration.SQL.Clear;
     datenbankform.query_migration.SQL.Add(cSQL_tblMIG);
     datenbankform.query_migration.Active := true;
Da fällt mir gerade ein. Kann diese Funktion IIF() nicht eine ADO-spezielle Funktion sein?



@marabu

Vielleicht teste ich das mal.. Es könnte auch sein, dass es einfach an blöden Syntaxfehlern liegt ..
Peter Steffens
  Mit Zitat antworten Zitat
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 13:18
@marabu


SQL-Code:


SELECT test = CASE
    WHEN test = 0 THEN 'Null
    ELSE test
  END
FROM ...
So, wie ich das verstanden habe wird in der Spalte Test die 0 durch den Text 'Null' ersetzt. Richtig?

ich möchte das Ergebnis aber in einer neuen Spalte haben..

etwa so

SQL-Code:

SQL-Code: markieren
SELECT test = CASE
    WHEN test = 0 THEN 'NullAS Neuespalte
    ELSE test
  END
FROM ...
Peter Steffens
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 13:18
Du gibst der neuen Spalte einen Namen und legst den Typ fest. Außerdem markierst Du sie als "Berechnet" oder "InternalCalc". Dann musst Du im Ereignis "OnCalcFields" Deiner Datenquelle festlegen, wie die Spalte berechnet wird. Also z.B.:

Delphi-Quellcode:
 with TableA do
  FieldByName('MeinFeld').AsInteger := FieldByName('FeldA').AsInteger + FieldByName('FeldB').AsInteger
Hiermit würdest Du also im neuen Feld "MeinFeld" die Summe der Felder A und B erhalten.

Bei InternalCal-Feldern kannst Du noch im OnCalcFields die Abfrage "if TableA.State = dsInternalCalc then" vorwegstellen.

Weitere Infos findest Du sicherlich in der Delphi-Hilfe.

Gruß

Daddy
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Spalte anhängen in DBGRID

  Alt 4. Mai 2007, 13:28
Vielleicht wird es so deutlicher:

SQL-Code:
SELECT neuesfeld = CASE
    WHEN feld8 = 0 THEN 'Nix
    ELSE feld8
  END
FROM ...
Mit calculated fields findet die Arbeit auf der Client-Seite statt. Bei einem vollwertigen SQL Server würde ich immer eine SQL-Lösung vorziehen. Beim Definieren von berechneten Feldern müssen auch alle anderen benötigten Felder persistent gemacht werden - das vermindert die Wartbarkeit des Codes.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:18 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