PDA

Visualizza la versione completa : Borland dbExpress e MSSQL


Francesca80
12-11-2004, 10:38
Buongiorno!!
Oggi ho un nuovo problema...sto sempre lavorando sulla mia applicazione c++ con Borland C++ builder 6.0. Per ora il db è realizzato usando Borland Database engine ma visto che questo crea problemi nel momento in cui si crea l'applicativo ho pensato di passare a un db SQL server. Ho sostituito nell'applicazione i componenti BDE con componenti dbExpress li ho collegati a un db SQL server...quando pero testo la connessione tra il componente e il db ho questo errore:

[DBNETLIB][ConnectionOpen(ParseConnectParams()).]Invalid connection

Qualche idea?
Grazie in anticipo.
Buona giornata!!

alka
12-11-2004, 13:06
Sembra si tratti di un problema riguardante i parametri di connessione che hai specificato per collegarti al database SQL Server. Dovresti riportarli qui per capirne qualcosa di più...

Ciao! :ciauz:

Francesca80
12-11-2004, 13:21
Grazie mille..
..al momento sono riuscita a fare il collegamento al db..adesso ho altri problemi.
Quando eseguo il costruttore della form principale che contiene il componente TSQLConnection mi da un errore di access violation..

__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
DataSeparator = ',';
DecimalSeparator = '.';
StringChar = '"';
Inizializza();
}

qualche idea?
Ciao

alka
12-11-2004, 16:14
Devi riportare il contenuto di Inizializza, probabilmente il problema si trova lì.

Suggerisco comunque di eseguire un debug passo passo per vedere il punto in cui l'eccezione viene generata.

Francesca80
13-11-2004, 10:58
ok...ho fatto il debug e ho trovato dove viene generato l'errore..
Nella creazione della form principale è compresa la creazione dinamica di una tabella nel db..
Il codice è questo:

//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
DataSeparator = ',';
DecimalSeparator = '.';
StringChar = '"';
Inizializza();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Inizializza(void)
{
ListaAttributi = new TList;
LBAttributi->Clear();
LBValori->Clear();
STNumAttributi->Caption = "";
STNumValori->Caption = "";
Salvaconnome1->Enabled = false;
BitBtnCalcoloRegole->Enabled = false;
BitBtnFiltraggio->Enabled = false;
STNRecords->Caption = "";
STNRegole->Caption = "";
STLiftMin->Caption = "";
STLiftMax->Caption = "";
STLeverageMin->Caption = "";
STLeverageMax->Caption = "";
STConvictionMin->Caption = "";
STConvictionMax->Caption = "";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
CreaTabellaRegole2_1();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::CreaTabellaRegole2_1(void)
{
TFieldDef *NewField;

//Inizializzazione della tabella delle regole scartate
TabellaRegole2_1->Active = false;
//TabellaRegole2_1->DatabaseName = "MioDatabase";
TabellaRegole2_1->TableName = "TabellaRegole2_1.db";
//TabellaRegole2_1->TableType = ttDefault;
TabellaRegole2_1->FieldDefs->Clear();

//Inizializzazione dei campi della tabella delle regole scartate
NewField = TabellaRegole2_1->FieldDefs->AddFieldDef();
NewField->DataType = ftInteger;
NewField->Name = "N. Regola";
NewField = TabellaRegole2_1->FieldDefs->AddFieldDef();
NewField->DataType = ftString;
NewField->Name = "Antecedente1";
NewField = TabellaRegole2_1->FieldDefs->AddFieldDef();
NewField->DataType = ftString;
NewField->Name = "Valore_Ant1";
.
.
.
//Creazione della tabella delle regole scartate
TabellaRegole2_1->~TSQLTable();
TabellaRegole2_1->DeleteRecords();
}

L'errore viene segnalato al momento dell'esecuzione di
TabellaRegole2_1->DeleteRecords();
e il motivo penso che sia perchè la tabella non viene creata..
Perchè secondo te la tabella non viene creata?o meglio..secondo te dove sbaglio nella creazione dinamica della tabella?
Grazie.
Fra

alka
13-11-2004, 14:03
Originariamente inviato da Francesca80
e il motivo penso che sia perchè la tabella non viene creata..
Perchè secondo te la tabella non viene creata?o meglio..secondo te dove sbaglio nella creazione dinamica della tabella?

Secondo me, non hai inserito la chiamata al metodo che permette di creare fisicamente la tabella (che se non sbaglio, si chiama CreateTable).

Francesca80
15-11-2004, 09:57
Buongiorno!!
Per i componenti TSQLTable di dbExpress il comando Createtable non esiste..il più simile che ho trovato (e che quindi dovrebbe creare una rabella dinamicamente) è ~TSQLTable() che ho già provato a mettere nel codice ma nulla..
Grazie cmq..se hai qualche altra idea sarà ben accetta..
Grazie,
Fra

alka
15-11-2004, 11:50
La piattaforma dbExpress è specifica per database di tipo SQL client/server; dai valori che hai specificato nelle proprietà, si direbbe che stai tentando di creare tabelle come file locali.

Ad ogni modo, su database di questo tipo si creano tabelle eseguendo statement DDL, cioè statement codificati in un linguaggio apposito (e spesso, leggermente diverso da database a database) che permettono di definirne la struttura.

Loading