Avatar billede whynot Nybegynder
17. november 2003 - 10:53 Der er 16 kommentarer og
1 løsning

indsæt record, MySQL

Halløjsa

jeg har set de tidligere spørgsmål og besvarelser omkring indsættelse af en record i en mysqltabel - men jeg kan ikke få det til at virke !?!?

Jeg har connected til databasen.. det er jeg sikker på - jeg kan nemlig se databasens indhold i et datagrid.

jeg har tilkoblet en DBnavigator som også ser ud til at virke.. jeg kan i hverttilfælde hoppe fra den ene record til den næste og tilbage igen.

Men jeg kan ikke editere i et felt og gemme det!

Mit datagrid viser også [MEMO] i felterne... men jeg kan se indholdet hvis jeg tilkobler et memofelt og pejer på den enkelte collum. Men jeg aner ikke hvorfor den viser [MEMO].?

men altså tilbage til mit primære spørgsmål.. jeg ved godt hvordan man putter ting i en mysql vha. php.. men jeg har aldrig prøvet med delphi.

Så er der nogle som kan hjælpe mig?
Avatar billede morten_s Nybegynder
17. november 2003 - 17:14 #1
Hvilke komponenter bruger du til at læse/skrive til din MySql database med ?
Her er et eksempel med dbExpress

procedure TForm1.Button1Click(Sender: TObject);
var
  aQuerry: TSQLQuery;
begin
  try
    aQuerry:= TSQLQuery.Create(self);
    with aQuerry do
    begin
      SQLConnection:= SQLConnection1;
      SQL.Add( 'INSERT INTO DinTabel '+
              '(Id, Navn, Tlf) '+
              ' VALUES ('''+ IntToStr(1) + ''','''+
                          'Bent betjent'','''+
                          '66 14 14 48'')');
      ExecSQL;
    end;
  finally
    aQuerry.Free;
  end;
end;
Avatar billede whynot Nybegynder
17. november 2003 - 18:59 #2
Jeg har installeret DAC for MySql...

jeg har iøvrig fundet ud af at dette der med [MEMO] - åbenbart hænger sammen med at DBgrids ikke kan "lide" andet end: int og varchar.. jeg tror det er noget med at de felttyper har en nøjagtid defineret længde.

Jeg har iøvrig løst problemet med at lægge ind i databasen på en USEL facon... nemlig ved, at bruge MySqltable og ikke MySqlQuery til at ligge data ind i DBgrid'et. Men det er jo en halv løsning... som ikke holder alle steder.!

Så jeg vil stadig meget gerne vide hvordan jeg "manuelt"ligger data ind i databasen.
Avatar billede morten_s Nybegynder
17. november 2003 - 19:01 #3
Lige som vist oven for, du bruger bare DAC's query i stedet
Avatar billede whynot Nybegynder
17. november 2003 - 19:41 #4
altså:

procedure TForm1.Button1Click(Sender: TObject);
var
  aQuerry: TDACQuery;
begin
  try
    aQuerry:= TDACQuery.Create(self);
    with aQuerry do
    begin
      SQLConnection:= SQLConnection1;
      SQL.Add( 'INSERT INTO DinTabel '+
              '(Id, Navn, Tlf) '+
              ' VALUES ('''+ IntToStr(1) + ''','''+
                          'Bent betjent'','''+
                          '66 14 14 48'')');
      ExecSQL;
    end;
  finally
    aQuerry.Free;
  end;
end;
Avatar billede morten_s Nybegynder
17. november 2003 - 19:45 #5
Ja du skal selvfølgelig bytte DinTabel ud med dit tabelnavn og felterne skal findes i din tabel
Avatar billede whynot Nybegynder
17. november 2003 - 19:48 #6
skal man altid anvende TDACQuery ?.. er der andre som man skal være opmærksom på?
Avatar billede morten_s Nybegynder
17. november 2003 - 19:50 #7
Det er længe siden jeg har brugt DAC komponenterne, hvilke muligheder er der...?

Du kan selvfølgelig anvende Tabel som du allerede har fundet ud af
Avatar billede whynot Nybegynder
17. november 2003 - 19:54 #8
he he.. det som jeg mener er mere.. hvilke følger med denne her DAC installation?.. eller skal TDACQuery installeres selvstændigt?
Avatar billede whynot Nybegynder
17. november 2003 - 20:19 #9
Når jeg compiler siger den:"undeclared identifier TDACQuery"... der er noget som tyder på at jeg anvender noget som jeg ikke har erklæret.
Avatar billede morten_s Nybegynder
17. november 2003 - 20:20 #10
Prøv lige at trække et TDACquery ind på formen så den har de rigtige units
Avatar billede whynot Nybegynder
17. november 2003 - 20:23 #11
hmmm.. jeg har noget som hedder:

mySQLQuery... er det den som du tænker på?.. fordi jeg har intet som hedder TDACQuery
Avatar billede morten_s Nybegynder
17. november 2003 - 20:24 #12
ja det lyder rigtigt
Avatar billede whynot Nybegynder
17. november 2003 - 20:28 #13
oki... det har jeg gjort nu..

en ny fejl opstår.. nu brokker den sig over at SQLConnection ikke er erklæret... hvad skal den variabel erklæres som?

desuden er SQLConnection1 det samme som datasource?..
Avatar billede morten_s Nybegynder
17. november 2003 - 20:46 #14
Nej du skal ikke bruge SQLConnection, det er kun til dbExpress
Avatar billede whynot Nybegynder
17. november 2003 - 20:52 #15
jamen det er jo det som du skrev i dit eksempel:

begin
      SQLConnection:= SQLConnection1;
      SQL.Add( 'INSERT INTO DinTabel
Avatar billede whynot Nybegynder
19. november 2003 - 11:27 #16
Jeg har nu endelig fundet ud af svaret :)

... i hverttilfælde en brugbar løsning..

anyway.. det virker for mig når jeg skriver følgende:

procedure TForm1.Button1Click(Sender: TObject);
var
  aQuerry: TmySQLQuery;
begin
  try
    aQuerry:= mySQLQuery1; //har her påført form'en en mySQLQuery og lader denne have property'en for databasen.. så slipper man for at skulle connecte selv :)

    with aQuerry do
    begin
      SQL.Add( 'INSERT INTO DinTabel '+
              '(Id, Navn, Tlf) '+
              ' VALUES ('''+ IntToStr(1) + ''','''+
                          'Bent betjent'','''+
                          '66 14 14 48'')');
      ExecSQL;
      SQL.clear;
    end;
end;


Problemet med denne løsning er at den IKKE er objektorienteret... men den virker!

Jeg kan dog stadig ikke gennemskue hvordan jeg skulle have gjort hvis jeg skulle have fulgt morten_s's løsning med en create statement.. fordi i så fald skal jeg håndtere connectionen selv.. og det kan jeg ikke finde ud af.
Avatar billede whynot Nybegynder
20. november 2003 - 22:03 #17
Nå... men altså morten_s får point alligevel.. jeg fik ikke det endelige gyldige svar - men en dog en brugbar løsning.. mange tak for det :)
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