Czemu rekordy ClientDataSet same zmieniają kolejnośc

0

jak w temacie

kiedy edytuje jakis rekord w bazie w trybie ClientDataSet-x->Edit()
to po zmienieniu jakiegos pola w tej bazie

Client Data Set zrzuca mi go na sam koniec
co psuje porządek

// (takze psuje moje indexowanie oparte nieszczęsliwie na znajdowaniu ostatniego, dodawaniu 1 i append'owaniu danych)

może ktoś wie czemu tak sie dzieje i jak temu można zaradzic Smile

0

daj kod jak dodajesz bo coś mi się wierzyć nie chce

0

edytuje se tak:
// wiem ze to troche bez sensu z tworzeniem tego obiektu ale musze wykorzystac swoje klasy maxymalnie

        customer *obiekt = new customer(Customers->Edit_City->Text, Customers->Edit_adress->Text,             Customers->MaskEdit_phone->Text);

        Company->ClientDataSet_cust->Edit();
        Company->ClientDataSet_cust->Fields->Fields[3]->AsString = obiekt->city;
        Company->ClientDataSet_cust->Fields->Fields[4]->AsString = obiekt->adress;
        Company->ClientDataSet_cust->Fields->Fields[7]->AsString = obiekt->phone;
        Company->ClientDataSet_cust->Post();
        delete obiekt;

a dodaje se tak do bazy:

{
customer *obiekt = new customer(Customers->Edit_F_Name->Text, Customers->Edit_L_Name->Text, Customers->Edit_City->Text, Customers->Edit_adress->Text, Customers->MaskEdit_phone->Text,0,0,0,0, DateToStr(Date()));
obiekt->add_to_DB(Company->ClientDataSet_cust);
Customers->Hide();
}

gdzie obiekt->add_to_DB(Company->ClientDataSet_cust); wygląda tak:

void customer::add_to_DB(TClientDataSet *base)
{
base->FieldByName("ID")->AsInteger = this->make_index(base);
base->FieldByName("First Name")->AsString = this->first_name;
base->FieldByName("Last Name")->AsString = this->last_name;
base->FieldByName("City")->AsString = this->city;
base->FieldByName("Adress")->AsString = this->adress;
base->FieldByName("Cars rent currently")->AsInteger = this->cars_curr_rent;
base->FieldByName("Total cars rent")->AsInteger = this->cars_rent;
base->FieldByName("Cell phone")->AsString = this->phone;
base->FieldByName("Km made")->AsInteger = this->km_made;
base->FieldByName("Money spent")->AsFloat = this->money_spent;
base->FieldByName("Date of registry")->AsDateTime = this->date_reg;
}

gdzie: this->make_index(base); jest funkcją ważną w której ustawiam tryb dodawania do bazy:

int customer::make_index(TClientDataSet *base)
{
int i = 0;
base->FindLast();
try
{
i = base->Fields->Fields[0]->AsInteger;
}
catch (Exception &exception)
{
i = 0;
}
i++;
base->Append();
base->Fields->Fields[0]->AsInteger = i;
return i;
}

:) troche zawiniety kod chyba

0

Zapomniałem dodać, że problemu nie widać od razu czyli po samej operacji zmiany,
ale po zapisaniu bazy do pliku i ponownym jej załadowaniu metodami wbudowanymi

SaveToFile
i
LoadFromFile

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