Toon posts:

[C++ Builder] ODBC browse*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een progje aan het maken waarmee een gebruiker zijn password voor een db kan wijzigen. Dit wijzigen van het password is het probleem niet, dat lukt. Maar de db waarvoor het password gewijzigd moet kunnen worden is nu 'hard' gekoppeld in het progje. En ik wil dit generiek maken, das wel zo handig.

Daarom wil ik een lijst op mijn scherm krijgen van de Datasources uit de ODBC en daar de db in kwestie uit kiezen.

Ik heb gegoogeld en hier op GoT gezocht. Ik heb o.a. gezocht naar de ODBC API maar niet iets gevonden waar ik verder mee kon.

Ik heb gelezen:
to browse the odbc database connections just call the odbc api function : SQLDriverConnect, with the flag SQL_DRIVER_PROMPT and the system ODBC dialog will magically appear.
Dus ik dacht dat is wat ik moet hebben. Maar ik kon nergens vinden hoe ik dit uit moet voeren.

Ik heb ODBCConnect geprobeerd, helaas dit ging bij mij niet goed. Daar moest een file voor geincluded worden maar ik heb niet kunnen vinden welke.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
C++ ?
C++ Builder? Visual C++? C++?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 24 oktober 2002 @ 10:59:
C++ ?
C++ Builder? Visual C++? C++?
Borland C++ Builder 4

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Ik heb ooit zo eens iets gedaan in C++ Builder.

Maak je gebruik van de TDatabase componenten enzo?

Ik weet niet meer precies hoe ik dat deed, maar je kunt alleszins mbhv een of ander component alle data sources zien die bekend zijn op het systeem.
Je moet eens kijken naar TDatabase.Session oid.
* whoami weet het niet zo vanbuiten en kan het ook niet opzoeken.

Je kunt dan die string gebruiken als AliasName in het TDatabase component ofzo.
* whoami zal wel eens kijken als hij thuis is.

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Maak je gebruik van de BDE? (TTables, TQuerys zoals whoami zich ook afvraagt)

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
LordLarry schreef op 24 oktober 2002 @ 11:26:
Maak je gebruik van de BDE? (TTables, TQuerys zoals whoami zich ook afvraagt)


Dat wou ik zeggen. :P Kon er niet opkomen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
LordLarry schreef op 24 oktober 2002 @ 11:26:
Maak je gebruik van de BDE? (TTables, TQuerys zoals whoami zich ook afvraagt)
Nee, ik heb aliassen aangemaakt in de ODBC. Die wil ik kunnen selecteren en dat dan onderwater koppelen in de DataModule aan een TQuery.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En hoe connect je dan vanuit Delphi met die ODBC? Via de BDE....
BDE is een tussenlaag en dat is het enige waar die TQuery's mee werken.
De BDE kan weer op zijn beurt o.a. werken met ODBC.

Dus inprinciepe zou je moeten kiezen uit BDE koppelingen ipv ODBC zou ik zeggen. Dat kan zeker, maar ik weet zo uit mn hoofd niet hoe. Verder heeft Broland aangegeven dat de BDE vanaf nu niet meer ondersteund wordt, dus bouw er niet een te groot programma op :p

Zoek eens op www.tamaracka.com naar BDE.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
En hoe connect je dan vanuit Delphi met die ODBC? Via de BDE....
BDE is een tussenlaag en dat is het enige waar die TQuery's mee werken.
De BDE kan weer op zijn beurt o.a. werken met ODBC.
Ok, ik wist niet dat de koppeling via de BDE ging. Ik zal een ff op jouw link kijken.

En ik werk met C++ builde niet met Delphi, maar dat maakt verder geen verschil.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 24 oktober 2002 @ 11:48:
En ik werk met C++ builde niet met Delphi, maar dat maakt verder geen verschil.
Inderdaad :) mijn fout. Maar het maakt idd geen verschil

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Kan je niet gewoon en de BDE het wachtwoord invullen? Als dan de DB locatie, type of wachtwoord veranderd hoef je je programma ook niet te recompilen en je hoeft ook niet opnieuw uit een koppeling te kiezen. Je houd gewoon de BDE koppeling met dezelfde naam.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Kan je niet gewoon en de BDE het wachtwoord invullen? Als dan de DB locatie, type of wachtwoord veranderd hoef je je programma ook niet te recompilen en je hoeft ook niet opnieuw uit een koppeling te kiezen. Je houd gewoon de BDE koppeling met dezelfde naam.
Dat klopt, maar ik heb verschillende aliassen voor verschillende DB. Ik wil eigenlijk dat ik ook andere aliassen kan kiezen om dus ook voor andere db's een password te veranderen. Dan heb ik het generiek. Nu kan ik alleen de passwords voor 1, in de sourcecode geprogrammeerde, alias/db wijzigen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Voor de verandering post ik eens kant en klare code.
Met onderstaande code haal je alle gekende BDE aliasen en ODBC drivers op, en deze steek ik dan in een treeview.
Deze code gebruik ik in m'n sql editor (die ik nooit heb afgewerkt) om een lijst te krijgen van alle gekende datasources. Zo kon ik makkelijk van databank wisselen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void TfrmMain::GetDatabases()
{

  TStringList*     AliasNames;         // Stringlist wich holds all known aliases
  TTreeNode*       RootNode;           // Pointer to the rootnode
  TTreeNode*       NewNode;

  AliasNames = new TStringList;
  dbseStd->Session->GetAliasNames(AliasNames);
  //show aliasnames in the treeview control
  tvwDatabase->Items->Clear();
  RootNode = tvwDatabase->Items->Add(NULL, "Databases");
  int(RootNode->Data) = 0;
  for (int i = 0; i < AliasNames->Count; i++)
  {
    NewNode = tvwDatabase->Items->AddChild(RootNode, AliasNames->Strings[i]);
    int(NewNode->Data) = 1;
  }
  tvwDatabase->Items->Item[0]->Expand(FALSE);

  delete AliasNames;

}

tvwDatabase is een treeview, dbseStd is een TDatabase.

Om dan te connecteren met de geselecteerde datasource, heb je volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  try
  {
    dbseStd->Connected = FALSE;
    dbseStd->AliasName = tvwDatabase->Items->Item[IndexSelected]->Text;
    dbseStd->Connected = TRUE;

    tlbtnConnect->Enabled    = FALSE;
    tlbtnDisconnect->Enabled = TRUE;

    stbStatusBar->Panels->Items[1]->Text = CiTxtConnected +
                                           dbseStd->AliasName;
  }
  catch(EDatabaseError& E)
  {
    Application->MessageBox(CiTxtFailedToConnect ,
                            "", MB_OK);
  }

https://fgheysels.github.io/

Pagina: 1