Avatar billede yilmaz1976 Nybegynder
08. august 2003 - 11:22 Der er 11 kommentarer

Database programmering

Hvordan skriver og læser jeg til/fra en Access database med "c++ Borland Builder 5"? For at kunne læse og skrive til databasen, skal jeg have en connection til databasen, hvordan foregår det?

Jeg kender til c++, men det er første gang jeg sidder og arbejder i borland builder, så i må meget gerne være detaljeret i jeres forklareing....
Avatar billede webshortcut Nybegynder
08. august 2003 - 11:30 #1
Du går ind under fanen data Access og vælger komponenten TDatabase
i object indspector vælger du driver type og fortæller hvor databasen ligger
Avatar billede yilmaz1976 Nybegynder
08. august 2003 - 11:47 #2
Og det er så database komponenten jeg opretter? og det er så noget vi bagefter skal bruge til at hentedata og gemedata?
Avatar billede webshortcut Nybegynder
08. august 2003 - 12:03 #3
jeps bagefter kan du bruge en TQuery hvor du kan skrive SQL til at hente gemme
data.

I TQuery's object insector vælger du 
under databasename din database komponent (i den liste der åbnes skal du gerne kunne finde navnet på din databse komponent).

Også skal du i dit program eksekvere din sql og behandle resultat sættet
læs evt i builer hjælpen om TQuery komponenten da den kan mange ting

Alt efter hvad du skal lave kan du måske med fordel bruge en datasource sammen med din Tquery og nogle af builderens dataware komponenter (de ligger under fanen data controls) det kan gøre det meget nemt at lave database applikationer HVIS det ikke er alt for komplekst det man skal lave.
Avatar billede yilmaz1976 Nybegynder
08. august 2003 - 13:04 #4
Er det muligt at lave alt det med med læs og skriv til database fra en Classe som min GUI så kan bruge? Således at jeg kan spare på kode? Det er i virkeligheden den måde jeg godt kunne tænke mig at lave det, hvis du forstår min tanke?... Hvordan kan jeg lave det på den måde? Kan du skrive et eksempel på sådan en classe?(husk at jeg ikke har rodet med borland builder før :o))
Avatar billede webshortcut Nybegynder
08. august 2003 - 15:59 #5
start med at lave et datamodule hvor du ligger din TDatabase komponent samt
Dine TQuery f.eks. en til at Insert og Select

De næste 3 funktioner arbejder på Database komponenten
short __fastcall Data::StartTransaction()
{
    if(!Database->InTransaction)
    {
      Database->StartTransaction();
      return 1;
    }

    return 0;
}
//---------------------------------------------------------------------------
short __fastcall Data::Commit()
{
    if(Database->InTransaction)
    {
      Database->Commit();
      return 1;
    }

    return 0;
}
//---------------------------------------------------------------------------
short __fastcall Data::RollBack()
{
    if(Database->InTransaction)
    {
      Database->Rollback();
      return 1;
    }

    return 0;
}

Funktion til at inserte
short __fastcall Data::ins()
{
  StartTransaction();

  try{
// Felt1..4 er variabler der er defineret i din SQL (TQuery)
        qIns->Params->ParamByName("Felt1")->AsString = "1";
        qIns->Params->ParamByName("Felt2")->AsString = "2";
        qIns->Params->ParamByName("Felt3")->AsString = "3";
        qIns->Params->ParamByName("Felt4")->AsString = "4";
        qIns->ExecSQL();

        Commit();
        qIns->Close();
  }
  catch(...)
  {
        Rollback
        return 0; // Failed
  }
  return 1;  // succes
}

Select funktion
short __fastcall Data::Select()
{
  AnsiString felt1, felt2, felt3, felt4;
  StartTransaction();


  try{
        qSel->Open();
        qSel->First();

        while( !qSel->Eof )
        {
                Felt1 = qSelFelt1->AsString;
                Felt2 = qSelFelt2->AsString;
                Felt3 = qSelFelt3->AsString;
                Felt4 = qSelFelt4->AsString;
                qSel->Next();
                // udskriver resultat sætttet record for record
                ShowMessage(Felt1+Felt2+Felt3+Felt4)
        }

        Commit();
        qSel->Close();
  }
  catch(...)
  {
        Rollback();
        return 0; // Failed
  }
  return 1;  // succes
}

Sql'en du skal skrive, skrives i TQuery klik på SQL punktet i object inspector
Håber det hjælper da det meste af det du skal lave foregår i object inspector så det er lidt svært at lave eksemple kode jeg kan vise dig her.
Avatar billede yilmaz1976 Nybegynder
10. august 2003 - 14:38 #6
Kan man også ligge TQuery og dataSource componenter i en classe og fra GUI´en kalde disse funktioner? Jeg vil gerne have lagt så meget i classer for sig selv, som muligt....

Jeg tænkte på om man kunne ligge TQuery og de andre database componenter i en classe og som de funktioner du skrevet til mig (08/08-2003 15:59:18) kan bruge.... Således at man i GUI(Interfacen) ikke behøver at oprette flere TQuery og DataSource Objekter, man at man fra én classe kan kalde den samme objekt, og samtdig bruge de funktioner som man har oprettet.... Jeg håber at du fårstår...
Avatar billede yilmaz1976 Nybegynder
10. august 2003 - 14:56 #7
Dvs. at jeg skal bruge 1 Database component og 1 RQuery Component, som skal kunne bruges på alle formerne (GUI´en).
Avatar billede webshortcut Nybegynder
10. august 2003 - 15:14 #8
du skal kun bruge en database komponent (medmindre at du skal arbejde på flere
databaser af gangen)
du kan godt nøjes med en TQuery component så skal du bare skifte Sql
ud på Tquery componenten for hvert kald det vil du kunne gøre således

Query1->Close(); // lukker queryen
Query1->SQL->Clear(); // clear sql listen
Query1->SQL->Add("Select from adresse where Navn = 'test'"); // tilføjer ny sql
Query1->ExecSQL(); // fyre sql'en af mod databasen
Avatar billede webshortcut Nybegynder
10. august 2003 - 15:16 #9
ups når det er en select
så skal du bruge Query1->Open();
ellers kan du ikke få et resultatsæt og arbejde med
du bruger Query1->ExecSQL() når det er insert, delete eller update
Avatar billede yilmaz1976 Nybegynder
12. august 2003 - 10:14 #10
Sql sætningen skal vel være dynamisk for at jeg ikke skal skrive det igen og igen? Jeg kan vel lave en funktion på en classe således.

SQLFunktion()
{
str="Select * from ";
str+=tabel;
str+=" Where Id=";
str+=KundeId;

return str;

}
Query1->SQL->Add(SQLFunktion);

Vil det ikke være smart at lave det således?
Avatar billede webshortcut Nybegynder
12. august 2003 - 17:21 #11
det var sådan ca. sådan jeg ville gøre 8-)
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