Avatar billede whynot Nybegynder
24. november 2003 - 13:38 Der er 11 kommentarer og
1 løsning

overførsel af DBgrid row værdi til anden form

Hejsa eksperten

Jeg har en DBgrid som jeg gerne vil have at mine brugere skal kunne vælge en row - hvorefter der bliver created en anden form og kørt en sql-query på baggrund af den værdi fra DBgriddet.

Er det til at forstå?.. hmm jeg prøver for en sikkerheds skyld lige at uddybe mit spørgsmål.

Jeg har følgende til at aflæse en værdi i min DBgrid:

Form1.DBgrid1.Fields[1].AsString

herved kan man fejltjekke med en showmessage om man får den rette værdi.

Jeg laver en form på baggrund af en "skabelon" på denne facon:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
with TForm2.Create (Application) do
begin
  Show;
end;

Meningen er nu at værdien fra:
  DBgrid1.Fields[0].AsString - som jo er sat ved at brugeren har trykket på en row i DBgriddet skal formidles over på den nye createt Tform2, og få kørt en sql-statement så felterne på den nye form kan fyldes af data fra databasen.


jeg håber nogle kan hjælpe mig.
Avatar billede martinlind Nybegynder
24. november 2003 - 13:45 #1
Di kan evt. lave et edit felt på din form2 som du kan tilskrive inden du kører show

begin
  Edit1.text := DBgrid1.Fields[1].AsString;
  show;
end;
Avatar billede whynot Nybegynder
24. november 2003 - 13:50 #2
Hvordan adresserer jeg Edit1.text?

Denne ligger jo på form2 som netop lige er oprettet... hvordan tilgår jeg denne editbox?

er det noget med form2.edit1.text?.. fordi det har jeg prøvet og det virker ikke.
Avatar billede martinlind Nybegynder
24. november 2003 - 13:58 #3
dette burde virke :

begin
with TForm2.Create (Application) do
begin
  Edit1.text := Form1.DBgrid1.Fields[1].AsString;
  Show;
end;

/Martin
Avatar billede whynot Nybegynder
24. november 2003 - 14:14 #4
Ja det burde det.. men der er et eller andet som nulstiller den nye form, så edit1.text ikke bliver sat.

Jeg har nemlig prøvet Martinlind's forslag.. og det virker desværre ikke... edit1 får ikke den "nye" værdi.

Hvad er forskellen mellem application og self?.. jeg tror det er noget med nedarvning at gøre. fordi jeg har på form2 og er min skabelog slettet text som delphi default sætter til "edit1".. og denne er alligevel sat til "edit1" når den bliver createt.?!?!?.. meget skørt.
Avatar billede martinlind Nybegynder
24. november 2003 - 14:18 #5
det virker som om du får createt en anden classe end den du gerne vil, application / self har ikke nogen betydning mht. arv, det er kun et spm om owner ( hvilken object liste din form bliver sat ind i ) du kan også create med NIL som owner
Avatar billede whynot Nybegynder
24. november 2003 - 14:22 #6
øhmmm okey.. nu har jeg fundet ud af lidt mere...

min fejl fra før med denne der default setting.. se bort fra den.. min fejl.. jeg tænkte mig ikke lige om ;)

Men jeg har fundet ud af at begin
with TForm2.Create (Application) do
begin
  Edit1.text := Form1.DBgrid1.Fields[1].AsString;
  Show;
end;

virker såfremt man lige sætter form2.edit1.text := form1.edit1.text; altså at man tager værdien fra en anden tekst boks.

Derved må det være noget med denne her DBgrid som laver en fejl.
Avatar billede martinlind Nybegynder
24. november 2003 - 14:26 #7
ja det lugter det da lidt af
Avatar billede whynot Nybegynder
24. november 2003 - 14:31 #8
hmmmm.. jeg har lavet en MEGA dårlig work around..

se bare her... det bliver næsten ikke ringere ;)

form1.edit1.text := form1.DBgrid1.fields[1].AsString;
with TForm2.Create (Application) do
begin
  form2.Edit1.text := Form1.edit1.text;
  Show;
end;

Er der nogle som har en bedre idé.. og husk på at denne skal jo ikke sættes ind i en ny editboks.. men køres i en sqlstatement.
Avatar billede martinlind Nybegynder
24. november 2003 - 14:38 #9
Du kan bare lave en ny property ( varialbel ) på din form2 bare husk den skal være public, så kan du tilskrive den

/Martin
Avatar billede whynot Nybegynder
24. november 2003 - 14:42 #10
Jeg har vist et problem.. fordi DBgriddet bliver ikke opdateret med data når jeg kører min sql-statement.. jeg tror det er noget med at det skal "reloades" eller refreshes.. hvordan gør jeg det?
Avatar billede martinlind Nybegynder
24. november 2003 - 14:44 #11
Det plejer at være nødvendigt at lave en close / open på dit dataset, du kan prøve med en refresh, men det virker som regl ikke
Avatar billede whynot Nybegynder
24. november 2003 - 14:48 #12
hmm.. det er vist ikke min dag..!

endnu en gang har jeg taget mig selv i at lave en MEGA fejl.. jeg glemte helt at genaktivere databasen..

... men det virker nu.. jeg siger mange tak for hjælpen.. selvom at jeg føler mig en smule åndsvag ;)
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