[ MarkoBalkan @ 28.01.2009. 10:42 ] @
koristim mysql i borland builder c++ 2009.


našao sam primjere za povezivanje na bazu ali preko gotovih komponenti (SQLconnection, SQLQuery itd...).


dali netko ima primjer kao se ručno spojiti na bazu i prikazati u tablici podatke?



ne znam zašto borland gura te visualne komponente, kao i MS.

to je dobro ukoliko treba nešto na brzinu prikazati u tablici i za jednostavnije stvari.

[ X Files @ 28.01.2009. 10:50 ] @
Ako znas kako da se povezes na bazu preko vizualnih komponenti, onda nisi daleko i od 'rucnog' nacina. Sve u BCB se moze resiti i dinamicki:
Code:

TNekaKomponenta *Pokazivac = new TNekaKomponenta( this /* ili neki drugi argumenti */ );
// ...
Pokazivac->NekaOsobina1=...
Pokazivac->NekaOsobina2=...
Pokazivac->ConnectionString =...
// ... 
Pokazivac->Dogadjaj1 = MojDogadjaj1; // <--- funkcija koja ima iste argumente i povratnu vrednost kao i dogadjaj komponente
//  ...
Pokazivac->Open();
//  ...
delete *Pokazivac;


Probaj, pa javi ako zapne...
[ X Files @ 28.01.2009. 11:06 ] @
Da dodam, vizuelnim kontrolama (gridovi i sl), da bi bile vidljive treba da dodelis i Parent-a.
Pokazivac->Parent = Form1; // <--- Pridruženo formi
Pokazivac->Parent = Panel1; // <--- Pridruženo Panelu
Pokazivac->Parent = TabSheet1; // <--- Pridruženo nekoj kartici

[ MarkoBalkan @ 28.01.2009. 12:01 ] @
Code:


String st;
st="Server=localhost;Database=proba;User name=root;Password=123;";

TSQLConnection  *ts=new TSQLConnection(this);
TSQLQuery *tq=new TSQLQuery(this);
TSQLDataSet *td;

ts->DriverName="MySql";
ts->dodijeliti string za konekciju ;
tq->SQLConnection=ts;
tq-> SQL->ToString()= "select * from prva";
td->SQLConnection=ts;

ts->Open();

ts->Close();




ne znam dalje kako povezati query, konekciju, napuniti dataset i dataset prikazati u tablici tj.
DBGrid1->DataSource=td, kao što je kod .net-a
konekcija, dataadapter, datatable ili dataset.

jedino tablicu imam na formi

mislim da bude nešto od mene.




[Ovu poruku je menjao MarkoBalkan dana 28.01.2009. u 13:32 GMT+1]
[ MarkoBalkan @ 28.01.2009. 12:48 ] @
kad stavim query komponentu na formu i probam se spojiti javi grešku
[ X Files @ 28.01.2009. 17:02 ] @
Ok, evo napravio sam parce koda koje treba da pokaze kako se dinamicki kreiraju sve komponente i sta se s cime spaja. Sve je u dodatku (za BCB2009 koji koristis).

Primer je za pristup i pretragu lokalne MDB baze, koja treba da bude tamo gde je i EXE, ali princip je potpuno isti i za uspostavljanje drugih konekcija.

SCREENSHOT:



--- H ---
Code:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include <DBGrids.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);

    __fastcall ~TForm1();
    TPanel *pPanel;
    TEdit *pEdit;
    void __fastcall Moj_pEditChange(TObject *Sender);
    void __fastcall Moj_pFormActivate(TObject *Sender);

    TADOConnection *pADOConnection;
    TADOQuery *pADOQuery;
    TDataSource *pDataSource;
    TDBGrid *pDBGrid;
    TDBNavigator *pDBNavigator;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


--- CPP ---
Code:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // Forma
    Height = 600;
    Width = 800;
    Position = poDesktopCenter;
    OnActivate = Moj_pFormActivate;

    // Panel
    pPanel = new TPanel( this );
    pPanel->Parent = this;
    pPanel->Width = 40;
    pPanel->Align = alTop;

    // Edit na panelu
    pEdit = new TEdit( this );
    pEdit->Parent = pPanel;
    pEdit->Left = 8;
    pEdit->Top = 10;
    pEdit->OnChange = Moj_pEditChange;

    // Navigator na panelu
    pDBNavigator = new TDBNavigator( this );
    pDBNavigator->Parent = pPanel;
    pDBNavigator->Left = pEdit->Left + pEdit->Width + 8;
    pDBNavigator->Top = 8;

    // Grid na formi
    pDBGrid = new TDBGrid( this );
    pDBGrid->Parent = this;
    pDBGrid->Align = alClient;

    // Konekcija na bazu
    pADOConnection = new TADOConnection( this );
    pADOConnection->ConnectionString =
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
        ExtractFilePath( Application->ExeName )+
        "baza.mdb;Persist Security Info=False";
    pADOConnection->LoginPrompt = false;
    pADOConnection->Connected = true;

    // Upit
    pADOQuery = new TADOQuery( this );
    pADOQuery->Connection = pADOConnection;

    // Veza izmenju podataka i vizuelnih kontrola
    pDataSource = new TDataSource( this );
    pDataSource->DataSet = pADOQuery;

    pDBGrid->DataSource = pDataSource;
    pDBNavigator->DataSource = pDataSource;


}
__fastcall TForm1::~TForm1()
{
    // Ovo direktno oslobadjanje nije neophddno, jer se u VCL...
    // ... objekti kojima je postavljen Owner ili Parent unistavaju automatski
    // Ako se ipak oslobadja rucno, treba voditi racuna o redosledu

    if ( pEdit )
        delete pEdit;

    if ( pDBNavigator )
        delete pDBNavigator;

    if ( pPanel )
        delete pPanel;

    if ( pDBGrid )
        delete pDBGrid;

    if ( pADOQuery )
        delete pADOQuery;

    if ( pDataSource )
        delete pDataSource;

    if ( pADOConnection )
        delete pADOConnection;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Moj_pFormActivate(TObject *Sender)
{
    Moj_pEditChange( this );
}
void __fastcall TForm1::Moj_pEditChange(TObject *Sender)
{
    pADOQuery->Close();
    pADOQuery->SQL->Clear();
    UnicodeString Upit = "SELECT * FROM rasa WHERE naziv_lok LIKE '%" + pEdit->Text + "%'";
    pADOQuery->SQL->Add( Upit );
    pADOQuery->Open();

    pDBGrid->Columns->Items[0]->Width  = 30*8;
    pDBGrid->Columns->Items[1]->Width  = 30*8;
}

[ MarkoBalkan @ 28.01.2009. 17:50 ] @
puno zahvaljujem, sve radi.

samo da riješim još ovo sa myslq-om, nešto me zajebava.
[ X Files @ 28.01.2009. 17:57 ] @
Par saveta:

- Sve pokazivace na buduce objekte, koje ces dinamicki kreirati, stavi u H fajl, recimo u private ili public sekciju
- Kreiranje objekata mozes uraditi u konstruktoru
- Inicijalizaciju pocetnih parametara takodje u konstruktoru
- Unistavanje nije potrebno, vec sam objasnio
- Vodi racuna kog su tipa Osobine (Properties) koje je potrebno vezati za druge objekte, jer ti to upravo govori STA treba vezati.

[ MarkoBalkan @ 28.01.2009. 18:09 ] @
a ako se spajam na mysql , onda mu moram dodijelit ime drivera i ostalo šta treba?
[ X Files @ 28.01.2009. 18:25 ] @
Ako imas kod koji radi (podeseno u dizajneru), prvo pribelezi sta je sve menjano (podesavano) na svakom objektu u sistemu. Sve to treba preslikati u run-time verziju.

Ako je DRAJVER podesen u designtime-u, naravno da ga treba podesiti i u run-time-u.
[ X Files @ 28.01.2009. 18:28 ] @
Ovde imas neki primer:
http://www.baghli.com/bcb_mysql.html
[ MarkoBalkan @ 28.01.2009. 18:32 ] @
imam to.to sam baš jučer počeo malo proučavati.

koliko je BCB zastupljen u praksi?
tj. koliko se koristi?

[ X Files @ 28.01.2009. 18:40 ] @
Slabo (spram kvaliteta, po mom misljenju).
[ MarkoBalkan @ 28.01.2009. 18:54 ] @

Citat:
X Files: Slabo (spram kvaliteta, po mom misljenju).


ne kužim ovo!
nije kvalitetan ili?
[ X Files @ 28.01.2009. 19:25 ] @
Ma ne... BCB je po mom misljenju odlican, pre svega zbog VCL biblioteke, ali jednostavno nisu uspeli da se prosire po trzistu iz puno razloga, da sad ne polemisemo o tome...
[ MarkoBalkan @ 28.01.2009. 19:36 ] @
čuo sam da postoji kolekcija vcl biblioteka za delphi koje su skupili programeri. 2 ili 3 cd-a ako ne i više
vjerojatno bi radilo i s bcb-om.

pa me zanima ako netko zna šta više o tome?


[ X Files @ 28.01.2009. 19:46 ] @
Postoji hiljade na hiljade gotovih 3rd party komponenti za Delphi i BCB. Mnoge su besplatne ali mnoge su i komercijalne.

Problem je sto ne postoji potpuna kompatibilnost izmedju Delphi-ja i BCB-a, cak ne postoji ni izmedju razlicitih verzija istog proizvoda.

Koliko sam u toku, u CodeGear-u rade na tome da se uspostavi 100% kompatibilnost izmedju Delphi i BCB komponenti. To ce biti ono pravo.