Baza danych w Borland C++

0

hej, mam problem z Borlandowską bazą danych.

uzywam Borland Builder C++, muszę używać obiektów swoich klas (niekiedy na siłę troche) bo takie założenia projektu (bardziej chodzi o OOP niż o samą baze).

mam szereg klas dziedziczonych i w każdej funkcję (virtualną) która dodaje obiekt na rzecz którego została wywołana do bazy (ClientDataSet).

W projekcie ogólnie korzystam z komponentów:

DataSource (x3)
ClientDataSet (x3)
DBGrid (x1)

Problem polega na tym że chciałbym w celu większej optymalności całego projektu (OOP)
przesyłać (wskaźnik na) ClientDataSet jako argument do mojej funkcji virtualnej dodającej do bazy.

oto co mam mniej wiecej w funkcji

void osobowy::add_to_DB()
{
Form1->ClientDataSet1->FieldByName("ID")->AsInteger = Form3->make_index();
Form1->ClientDataSet1->FieldByName("Company")->AsString = this->company;
Form1->ClientDataSet1->FieldByName("Model")->AsString = this->model;
...
}

a chciałbym mieć cos takiego

void osobowy::add_to_DB(TClientDataSet *a)
{
a->FieldByName("ID")->AsInteger = Form3->make_index();
a->FieldByName("Company")->AsString = this->company;
a->FieldByName("Model")->AsString = this->model;
...
}

zeby móc przesyłać w kodzie cos takiego sobie

moje_jakies_auto->add_to_DB(Form1->ClientDataSet1);

czyli de facto zeby moja funkcja była bardziej uniwersalna

NIe wiem dlaczego nie umie przesłać ClientDataSet jako argumentu funkcji (na necie tego tez nie znalazłem nigdzie :/ )
podczas gdy przesłanie np. TEdit czy nawet całego TForma nie sprawia kłopotu

prosze o pomoc, jakąs rade :)

0

znaczy jakieś błedy, komunikaty, nie kompiluje się, cokolwiek?

0

mając w pliku nagłówkowym klasy osobowy (osobowy.h)

cos takiego: [CODE]

#ifndef OSOBOWY_H
#define OSOBOWY_H

#include "pojazd.h"
#include "auto.h"

class osobowy : public auto {
public:

    personel(AnsiString Color, AnsiString Model, AnsiString Company, AnsiString Type, AnsiString Prod_y , long int milage, double money, float coeff, int doors, bool gps, int power);

    void add_to_DB(TClientDataSet* );

int doors;
bool gps;

};

#endif

[\CODE]
nie kompiluje sie i wyrzuca błąd:

") Expected" ;) takze raczej glupi bład

// jak zmienie TClientDataSet* na TEdit lub TForm jest OK, ale ja bym chciał przeslac ClientDataSet

0

A czy klasa osobowy wie co to obiekt TClientDataSet? Bo chyba nie...

0

Masz racje: ona o tym nie wie

ale tak samo nie wie czym jest np. TForm *, czy TEdit *
lub tez w konstruktorze taki dings jak 'AnsiString'

lecz z uzyciem AnsiStringa w tym miejscu bez includowania czegokolwiek borland sie nie rzuca

to samo jesli uzyje sobie TForm * jak argument dla mojej funkcji, Borland nie protestuje ! i to mnie dziwi

z drugiej strony dlaczego w celu bycia bardziej hermetycznym mam dołanczac biblioteki z Formów

// nota bene jeśli do pliku .h klasy matki dołączylem
// plik nagłówkowy Forma do którego sie odwołuję to wszystko działa!

0

Wie czym sa klasy z Borlanda, bo prawdopodobnie srodowisko samo je dolacza w razie potrzeby. Twoja nie jest srodowisku znana, wiec sie nia nie zajmuje - sam musisz zadbac, zeby dane unity wiedzialy z czego maja korzystac. Includnij w tej klasie plik naglowkowy do TClientDataSet i powinno byc po sprawie.

0

Masz racje ! !:)
tylko nie wiem jaka to biblioteka zawiera ClientDataSet'a :)

// raczej nie pomoze vcl.h

0

sory sory, juz mam ;P
podglądnąłem .h pierwszego forma i mam ze to....

#include <DBClient.hpp>

recepta :D

THX za pomoc Johny Bravo

1 użytkowników online, w tym zalogowanych: 0, gości: 1