![]() |
Datenbank: MySQL • Version: 2.11.1 • Zugriff über: Query
in SQL dividieren mit Delphi
Also ich habe hier folgendes Problem:
Ich soll eine SQL Abfrage erstellen, mit der absolute und relative Häufigkeiten angezeigt werden. Mein Problem ist nun, dass wenn ich etwas dividiere, oder z.b. *0.001 rechne, die Spalte in Delphi einfach nicht da ist. bei phpmyadmin funktioniert das. zur Orientierung mal die procedure:
Delphi-Quellcode:
wenn ich das "100/" weglasse, funktioniert es ohne Probleme, aber dann sind logischer weise die Ergebnisse falsch.
var monat:string;
begin monat:=inttostr(CBmonat.Itemindex+1); if length(monat)<2 then monat:='0'+monat; with DM1.Qstatistik do begin close; sql.text:='SELECT count(GID) AS absolut, ((SELECT Count(GID) FROM gespraech)*(count(GID)))AS relativ, (SELECT Count(GID) FROM gespraech) AS gesamt '+ 'FROM gespraech INNER JOIN vorwahl '+ 'ON vorwahl.VORID=gespraech.VORID '+ 'WHERE vorwahl.art='+#39+'F'+#39+ ' AND datum like '+#39+'2008-'+monat+'-%'+#39; open; memo1.text:=sql.text; Lgesamt.caption:='gesamt: '+Fields[0].AsString; end;//with Qstatistik Das ganze ist für die Schule und die berechnung muss zwingend komplett mit SQL erfolgen. Wäree cht nett, wenn Lösungen oder auch schon Lösungsansätze da wären ;) |
Re: in SQL dividieren mit Delphi
Irre ich mich - oder steht in deinem Code nirgendwo ein "100/"?
PS: Überdenke mal deine DB-Struktur, wenn du Datumsabfragen mit LIKE durchführen musst... PPS: Benutze Parameter |
Re: in SQL dividieren mit Delphi
stimmt,d as mit 100 hatte ich zu testzwecken weggenommen und hier dann vergessen *sorry*
Delphi-Quellcode:
was ist schlimm, wenn man das mit like machen muss(bin recht neu auf dem gebiet), die Monate sollen dynamisch ausgewählt werden können.
'SELECT count(GID) AS absolut, (100/(SELECT Count(GID) FROM gespraech)*(count(GID)))AS relativ, (SELECT Count(GID) FROM gespraech) AS gesamt '+
'FROM gespraech INNER JOIN vorwahl '+ 'ON vorwahl.VORID=gespraech.VORID '+ 'WHERE vorwahl.art='+#39+'F'+#39+ ' AND datum like '+#39+'2008-'+monat+'-%'+#39; das ist aber erstmal egal, so lange es geht. es geht erstmal darum, dass ich (egal wie, hauptsache mit SQL) erstmal dividieren kann, oder zumindest irgend etwas anderes, wo das ergebnis dann die Prozente sind. |
Re: in SQL dividieren mit Delphi
SQL-Code:
SELECT
count(g1.GID) AS absolut, (100/(SELECT Count(g2.GID) FROM gespraech g2)*(count(g1.GID))) AS relativ, (SELECT Count(g3.GID) FROM gespraech g3) AS gesamt FROM gespraech g1 INNER JOIN vorwahl ON vorwahl.VORID = g1.VORID WHERE vorwahl.art=:art AND YEAR( g1,datum) = :jahr and Month( g1.datum) = :monat; |
Re: in SQL dividieren mit Delphi
danke mkinzler, muss erstmal schauen, wie das genau funktioniert
jedoch kommen in der DB Grid wieder nur 2 Spalten und die relativ fehlt. Ich bin mir auch nicht ganz sicher, wie ich das bei delphi einbinden kann.(hab erstma ohne WHERE gemacht)
Delphi-Quellcode:
das ist aber glaube falsch
sql.text:=
'SELECT '+ ' count(g1.GID) AS absolut, '+ ' (100/(SELECT Count(g2.GID) FROM gespraech g2)*(count(g1.GID))) AS relativ, '+ ' (SELECT Count(g3.GID) FROM gespraech g3) AS gesamt '+ 'FROM '+ ' gespraech g1 '+ ' INNER JOIN vorwahl ON vorwahl.VORID = g1.VORID '; (sorry, aber hab bisher ind er SChule nichts anderes beigenbracht bekommen und ne andere variante fällt mir nicht ein) |
Re: in SQL dividieren mit Delphi
Die Parameter kannst du mit
Delphi-Quellcode:
bzw.
DM1.Qstatistik.ParamByName('<Name>').Value := ...;
Delphi-Quellcode:
füllen.
DM1.Qstatistik.ParamByName('<Name>').as<Typ> := ...;
Aber es ist komsich, das das Feld verschluckt wird. Hast du die Abfrage mal in einem Admin-Tool getestet? |
Re: in SQL dividieren mit Delphi
Benutzt du wirklich MySQL 2.11.1? Dann solltest du vielleicht mal ein Update machen auf Version 5.
Gruss Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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