Avatar billede fcjohn Nybegynder
04. december 2000 - 13:38 Der er 2 kommentarer og
2 løsninger

Builder: SQL

Jeg skal skrive til en database ved tryk på en ok knap. Databasen er en standard \'paradox7\' DB, og i min tabel har jeg tre kolloner (Alpha, Alpha, Int).
Når knappen aktiveres, får jeg en fejlmeddelelse om at der en \'Invalid parameter\', jeg fatter det ikke, men måske er der en venlig sjæl her som kan hjælpe.


Her aktiveres knappen.


void __fastcall Tnybrugerfrm::okknap1Click(TObject *Sender)
{
nybrugerfrm->Hide();
Login N;
if (nytpass->Text == nytpassgentag->Text && rettighed->Text == \"Fuld
adgang\")
{
N.NyBruger(this, nybruger->Text.c_str(), nytpass->Text.c_str(), 1);
}
else if (nytpass->Text == nytpassgentag->Text && rettighed->Text ==
\"Kun søgning\")
{
N.NyBruger(this, nybruger->Text.c_str(), nytpass->Text.c_str(), 0);
}
}

---------------------------------------------------------------------------------------------------------------------------------------------------

Headerfilen til Login-klassen


#include <vcl.h>
#include <String>
class Login
{

    public:
    int Bruger(char*, char*, TForm*);
    void NyBruger(TForm*, String , String ,int);

};

---------------------------------------------------------------------------------------------------------------------------------------------------------

Funktion der burde gemme værdierne i databasen. Pinger er lidt svære at
se, men det er der hvor der er tre(\'\'\'), dvs. \"ping\" ser således ud \"\'\"


void Login::NyBruger(TForm* Formen, String brn,String pw,int ret)
{
    TQuery* Q = new TQuery(Formen);
    Q->DatabaseName = \"wt2000\";
    Q->SQL->Clear();
    Q->SQL->Add(\"INSERT INTO bruger VALUES ( \'\" + brn\"\'\");
    Q->SQL->Add(\", \'\" + pw\"\'\");
    Q->SQL->Add(\", \" + ret);
    Q->SQL->Add(\")\");
    Q->ExecSQL();
}
Avatar billede fcjohn Nybegynder
04. december 2000 - 13:41 #1
    Q->SQL->Add(\"INSERT INTO bruger VALUES ( \'\" + brn + \"\'\");
    Q->SQL->Add(\", \'\" + pw + \"\'\");

Der skal selfølgelig være et plus efter brn og pw, men det er ikke dette der er fejlen.
Avatar billede soepro Nybegynder
04. december 2000 - 14:58 #2
Normalt skal man huske at sætte \'Parent\' propertyen på dynamisk kreerede objekter, for at de fungerer - men det skulle (prøv !) kun gælde visuelle komponenter.

Jeg forstår ikke hvorfor du ikke anvender et datamodule, og simpelthen definerer din SQL komponent deri. Hermed behøv du ikke -midlertidigt- at lave en ny komponenet. (Som du i øvrigt glemmer at fjerne igen.) Jeg har prøvet at lave flere TTable komponenter til samme database - og oplevet at mine opdateringer ikke var lavet i databasen før efter jeg havde afsluttet min applikation.
Avatar billede soepro Nybegynder
04. december 2000 - 15:06 #3
Jeg har lavet en ny applikation med en form og et datamodul. I datamodulet har jeg lagt TO TQuery (SQL) komponenter på, med hver sin TSourcekomponent, og på min form har jeg så lagt et DBGrid (bare for at kunne se hvad der sker), en TEdit til at indtaste min SQL-streng og en TButton til at fyre den af. TDBGrid\'en peger på den anden af de to TQeuery komponenter, som jeg har sat til \'Active\' da jeg designede DataModulet. TQeuery komponent 1 anvender jeg kun til opdateringen.

Min OnClick handler for Button1 ser således ud:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // Insert new record into the file.
  DataModule1->Query1->Close();
  DataModule1->Query1->SQL->Clear();
  DataModule1->Query1->SQL->Text = Edit1->Text;
  DataModule1->Query1->ExecSQL();
  DataModule1->Query1->Close();

  // Force update of dataset used for display.
  DataModule1->Query2->Close();
  DataModule1->Query2->Open();
}

og det fungerer. Det sidste par Close/Open er for at få opdateret indholdet af mit TDBGrid - Refresh vil min ODBC handler af en eller anden grund ikke tillade.
Avatar billede fcjohn Nybegynder
07. december 2000 - 09:30 #4
Tak for svaret, det var ikke lige helt det jeg skulle bruge, men fandt selv ud af det.
Det virkede åbentbart hvis det hele stod i en linie.

Q->SQL->Add(\"INSERT INTO bruger VALUES ( \'\" + brn + \"\', \'\" + pw +\"\', \" + ret + \")\");

Min plan er at tildele dig nogle point for besværet, men bær over med mig hvis ikke jeg kan hitte det ud:-)
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