Avatar billede lubker Nybegynder
26. marts 2004 - 22:35 Der er 12 kommentarer og
1 løsning

database-kontakt - mellem to forms

Jeg er stødt ind i et lille problem.
På min hovedform, vælger man en post fra en database, som skal kunne ændres fra en anden form, men hvordan tjekker jeg hvilket felt der er valg i hovedformen fra min sekundære form?
Avatar billede dkn Nybegynder
26. marts 2004 - 22:41 #1
showmessage(inttostr(Mainform.DB.RecNo));

hvis jeg forstår dig...
Avatar billede lubker Nybegynder
26. marts 2004 - 22:43 #2
Det jeg mener er at jeg har en main form hvor man bla.kan vælge en bestemt bruger.

Hvis jeg så klikker på "rediger bruger" kommer der et nyt vindue frem, meden række DBEdit felter for netop denne bruger frem, hvor jeg kan ændre forskellige instillinger.
Nu er problemet bare at jeg fra den sekundære form (ændre-formen) ikke kan se hvilken bruger der er valgt på main-formen.
Avatar billede dkn Nybegynder
26. marts 2004 - 22:59 #3
okay men du kan jo se hvilken record der er aktiv med koden jeg skrev.

Men der er så mange måder at gøre det på, men den bedste er altså direkte linkning til din mainform.

Ellers skal du på din rediger knap, sætte en variabel i din nye form.
Avatar billede lubker Nybegynder
26. marts 2004 - 23:02 #4
Okey. Er rimelig ny i Delphi.
Havde regnet med at når jeg smed DBEdit felter på den nye form, kunne jeg vælge DataSource og DataField i Object Inspector, men det kunne jeg selvfølgelig ikke...
Hvordan kan jeg praktisk gøre det?!?
Avatar billede x-masman Nybegynder
26. marts 2004 - 23:29 #5
var navn := string
navn := Mainform.DBedit.text;

Så har du navnet eller brugeren. Så kan du bruge Table.locate til at finde recorden.

Det er bare en mulighed. Ellers kan du gemme det i en global variable når du trykker ændre og så til gå den variabel.
Avatar billede hrc Mester
27. marts 2004 - 08:35 #6
Du kan gøre mange ting:

1. Du kan lave en CallBack-kobling hvor din form2 har fortalt form1 (via kode, naturligvis) at den skal sørge for form2'eren. Selvom det er en meget brugt tilgang er det ikke særlig objektorienteret:

procedure TForm1.DataSourceOnDataChange();
begin
  // Ikke et godt eksempel da du tilsyneladende bare får det felt der modificeres
  // (er det nu også sandt - har ikke tjekket) - du får eksemplet alligevel ;-)
  Form2.Edit1.Text := Field.AsString;
end;

Det andet er, at have dine databasekomponenter placeret på et TDataModule som de begge deler via deres "uses". Dette modul er beregnet til "non-visuelle" komponenter og et naturligt sted at placere DB-komponenter som deles, dvs. TADOConnection, TADOTable/TADOQuery og måske også TDataSourc.

Hvis du har DB-felter på begge forme, så vil de følges ad. Rykker du eksempelvis een linie ned i form1 så skifter alle DB-felterne i form2.
Avatar billede lubker Nybegynder
27. marts 2004 - 10:11 #7
Løsningen med er TDataModule lyder som en rigtig god løsning.
Men hvordan gør jeg det? er det ikke et kæmpe arbejde når jeghar oprettet minedatabasekomponenter på min main-form?
Avatar billede lubker Nybegynder
27. marts 2004 - 10:14 #8
Og hvordanforbinder jeg dataModulet med min main form?
Har nu prettet et DataModule, men de skal vel forbindes...
Avatar billede hrc Mester
27. marts 2004 - 10:52 #9
Når jeg har placeret mine komponenter på et TDataModule og har adgang til det vha. Alt-F11, så bruger jeg følgende (lidt doven DataModuler angår, kalder det altid "DM"):

begin
  with DM do begin
    Query1.SQL.Text := ''
    osv.
  end; // with
end;
Avatar billede lubker Nybegynder
27. marts 2004 - 11:01 #10
Okey...
Nuer er jeg ikke helt med... Når jeg trykker alt+F11 finder den DM. Hvad gør jeg så?
Avatar billede lubker Nybegynder
27. marts 2004 - 11:09 #11
(kan sikkert godt blive enige om lidt flere point...)
Avatar billede hrc Mester
28. marts 2004 - 19:55 #12
Med F11 angiver du at den nuværende fil skal gøre brug af DM og de ting den stiller til rådighed.

I DM'en plejer jeg at bruge dens OnCreate og OnDestroy til at åbne og lukke tabellerne:

OnCreate:
  ADOConnection.Open;
  ADOTable.Open;

OnDestroy;
  ADOTable.Close; // I omvendt rækkefølge
  ADOConnection.Close;

Men når jeg gør det, så skal jeg ind i Tools/Options <shift-ctrl-f11> for at flytte DM'eren allerøverst foran de forme der autokreeres (under fanebladet "Forms"). Nemmest at flytte den op vha. musen.

Hvis du arbejder med ADO så skal du lige huske at slå ADOConnection's LoginPrompt fra og ADOTables DirectAccess til (du skal naturligvis også lige huske at lave en ConnectionString vha. trykke på ...-knappen og vælge Build (vælg ADO DB Jet) og angiv stieen til databasen (mdb-filen))).
Avatar billede lubker Nybegynder
28. marts 2004 - 19:57 #13
Tak for hjælpen
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