Avatar billede nih Novice
02. december 2001 - 09:03 Der er 19 kommentarer og
1 løsning

Beregninger i TQuery

Jeg har lavet en del i MS Access, men er ved at konvertere til Delphi.
I Access kan man lave beregninger i SQL, hvordan gør man i delphi ????

Jeg har brug for et beregnet felt:
SELECT dato, (dato MOD 42) seksUger
FROM blabla

I Access anvender jeg brugerdef functioner, der laves i public moduler - Kan man det i DELPHI ????

Niels
Avatar billede stoney Nybegynder
02. december 2001 - 11:54 #1
Hvad er det helt præcist du vil udregne ?

Stoney
Avatar billede nih Novice
02. december 2001 - 16:36 #2
Det drejer sig om mit \'evighedsprojekt\' en vagtplan.
Jeg har en tabel med 3 felter:Dato, vagt, navn.

Mit udtræk skal vise antal vagter pr mand pr 6 ugers periode.
I Access kan man lave en SQL:
SELECT
  ([vagtplan_res]![dato]+1)-(([vagtplan_res]![dato]+1) Mod 42) AS periode,
  Min(vagtplan_res.Dato) AS start,
  First(vagtplan_res.Navn) AS Navn,
  First(vagtplan_res.Vagt) AS Vagt,
  Count(vagtplan_res.Vagt) AS Antal_Vagt
FROM vagtplan_res
GROUP BY ([vagtplan_res]![dato]+1)-(([vagtplan_res]![dato]+1) Mod 42);

Hvor alle felter grupperes efter et beregnet felt: Periode.
Jeg forventer ikke en færdig løsning, bare et hint til hvordan jeg skal gøre.

Niels
Avatar billede a_c Nybegynder
02. december 2001 - 22:30 #3
Jamen i Delphi fyrer du jo sådan set bare SQL statements af til din database, så du kan på sin vis gøre det samme - - siger jeg uden at kende noget til Access. Hvilken database kører du op mod?
Skal du tælle noget sammen kan du bruge count.
det bliver altså SELECT Count(et felt) AS Test
Group by og order by er jo standard SQL. Skal du arbejde med datoer er det meget afhængigt af hvilken database du arbejder med, men både i Oracle og MSSQL er der en bunke tid/dato funktioner og konverterings/formaterings funktioner der gør livet let for dig....
altså bortset fra at man aldrig kan huske hvor hvad hører til :)
A_C
Avatar billede stoney Nybegynder
02. december 2001 - 23:50 #4
nih>>

har du en mail adr ?

Jeg har lavet et lille project til dig

Stoney
Avatar billede nih Novice
03. december 2001 - 00:03 #5
A_C ->  Jeg forsøger mig med paradox. Problemmet er at felter af \'date\' type kun kan +,-.. Jeg kan ikke *,/,\'MOD\' når datatypen er date. ik\' endnu ihvertfald ;)

Stoney -> niels.ha@get2net.dk  -  Delphi4.
Avatar billede stoney Nybegynder
03. december 2001 - 00:24 #6
mail sendt

Stoney
Avatar billede nih Novice
03. december 2001 - 00:52 #7
Stoney -> Er modtaget :)

- Men er der ikke en mulighed for at lave beregninger og brugerdef funktioner i Delphi/Paradox databaser ????
Det er lykkedes mig at lave noget lignede din vagtplan.

PS - Jeg giver ikke sådan op

Niels
Avatar billede stoney Nybegynder
03. december 2001 - 01:11 #8
Jeg har aldrig brugt selve Access i sig selv, kun i forbindelse med Delphi, så jeg er ikke helt klar
over hvad brugerdef funktioner er.

Vedr. beregninger definerer du bare din query.
du kan selvfølge ændre sql statementet i runtime.
Prøv at kigge på Adoquery delen i det jeg har sendt dig.

Det er fuldstændig det samme om du bruger Tquery
eller Adoquery.

Stoney
Avatar billede nih Novice
03. december 2001 - 01:25 #9
Jeg kan desværre ikke se din source D4 acceptere ikke D6.

I Access kan man i et modul lave en function:

function foedselsdag(dato as date) as boolean
  if dato = #01-01-2002# then
    foedselsdag = true
  end if
end function

I SQL kan man så forespørge:

SELECT dato, foedselsdag([dato])
FROM tblKalender;

Niels


Avatar billede nih Novice
03. december 2001 - 01:28 #10
Jeg er bare TRÆT af Access\'s begrænsniger mht. programering og formularer og versionskonflikter og, og, og......

Niels
Avatar billede stoney Nybegynder
03. december 2001 - 01:41 #11
Prøv at åbne unit1.pas i notepad og se under

procedure TForm1.Button1Click(Sender: TObject);

Stoney
Avatar billede nih Novice
03. december 2001 - 02:09 #12
Jeps - er længe gjort.

du finder et antal (count) mellem 2 datoer vha parametere. Disse parametere skal mit program kende i forvejen.
I designtime vælger jeg en reference dato (1/1/1), og at vi kører med 6 ugers perioder.
Når brugeren indtaster(vælger) et årstal, er det meningen at Query\'en skal spytte en liste ud på ca 9 poster (9 perioder á 6 uger=52) med navn og antal vagter.

er jeg for krævende ???

Niels
Avatar billede stoney Nybegynder
03. december 2001 - 02:57 #13
Inden jeg kaster mig ud i et større project skal jeg lige høre om det en ny database du vil bruge
eller en eksisterende ?

Stoney
Avatar billede stoney Nybegynder
03. december 2001 - 03:10 #14
Hvordan skal listen egentlig se ud ?

          periode1  periode2  .......
person1
person2

Stoney
Avatar billede nih Novice
03. december 2001 - 03:10 #15
Det er en ny, men du behøver ikke lave et helt projekt, bare et hint.

Jeg har selvfølgelig nogle ideer:
* Løbe alle poster igennem og opdatere et grid.
* Anvende en Access med tilhørende forespørgsel.

Det undrede mig bare at jeg ikke lige kunne fyre en sql af.

Niels
Avatar billede nih Novice
03. december 2001 - 03:16 #16
Forespørgslen skulle se sådan ud:
periode1 person1 vagt1  antal
periode1 person1 vagt2  antal
periode1 person2 vagt1  antal
periode1 person2 vagt2  antal
periode2 person1 vagt1  antal
periode2 person1 vagt2  antal
periode2 person2 vagt1  antal
periode2 person2 vagt2  antal

Og så havde man jo lave et hav af muligheder for rapporter
Avatar billede stoney Nybegynder
03. december 2001 - 03:24 #17
Opret en ekstra kolonne/felt i din database der indeholder perioden.

Når du så indsætter en post sætter du programmet
til at finde ud af hvilken periode datoen hører
til og gemmer dette i periode feltet.

noget ala

if (DayOfTheYear>0 and DayOfTheYear<=42) then periode = 1
if (DayOfTheYear>42 and DayOfTheYear<=84) then periode = 2

etc. etc.

Herefter laver du bare  sql som
group by periode,navn

Din database vil selvfølgelig blive lidt større,
men jeg tror det vil gå væsentlig hurtigere da den
ikke skal lave modulus beregninger på samtlige poster.

Stoney
Avatar billede nih Novice
03. december 2001 - 03:35 #18
Det var smart - det er næsten for lidt pts for en hel nats arbejde. gi lige et svar

Tak for hjælpen.

Niels
Avatar billede stoney Nybegynder
03. december 2001 - 03:38 #19
Godnat og sov godt

Stoney
Avatar billede nih Novice
03. december 2001 - 03:38 #20
Nu er min nattevagt også slut.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester