CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Projekt w BCB6 a RAD Studio 2010 C++
Strona 1 z 1

Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: wtorek, 21 czerwca 2011, 11:05
przez butchermw
Witam,

Mam pytanie odnoście kompilatora RAD Studio 2010, czy jest możliwość otworzenia projektu utworzonego w starszym kompilatorze takim jak BCB6??

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: wtorek, 21 czerwca 2011, 16:23
przez Cyfrowy Baron
Jest możliwe, jednak ze względu na różnice w bibliotekach taki projekt się nie skompiluje. Ja swego czasu przenosiłem projekt z CodeGear RAD Studio C++Builder 2006 do środowiska Embarcadero RAD Studio C++Builder 2010 i musiałem go niemal w całości poprawiać. Głównym problemem są zmienne. Jeżeli w projekcie definiowałeś zmienne AnsiString, ale używałeś wyrazu String, to C++Builder 2010 będzie traktował taką zmienną jako UnicodeString a nie AnsiString, a UnicodeString jest obsługiwane inaczej. Dodatkowy problem to funkcje, które domyślnie obsługują UnicodeString. Istnieją co prawda ich odpowiedniki dla AnisString, ale ich nazwa kończy się na A, np. NazwaFunkcjiA. Nie wszystkie jednak funkcje mają swoje odpowiedniki w AnsiString i char, dla przykładu wszystkie funkcje klasy TApplication, np. Application->MessageBox obsługują tylko UnicodeString i wchar_t.

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: wtorek, 21 czerwca 2011, 17:55
przez butchermw
Ok, dzięki wielkie za wyjaśnienie.

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: poniedziałek, 4 lipca 2011, 12:56
przez butchermw
Zacząłem pisać program w wersji 2010 i natknąłem się na problem, podczas wysyłania zapytania do bazy MySQL dostaję następujący błąd:

bez tytułu.JPG


Wysłany kod z C
Kod: Zaznacz cały
  Form1->ADODataSet1->CommandText="select Lp, Nr_zamowienia from baza_zamowien where Lp like '%"+Form2->Edit1->Text+ "%' ";
   Form1->ClientDataSet1->Active=true;                     


Dodam że wszystkie komponenty do połączenia są dobrze skonfigurowane, nie jestem do końca pewny ale chyba chodzi tu o część kodu '%"+Form2->Edit1->Text+ "%' , bo gdy wpisuje stałą np. 1 to działa bez problemu. Proszę o pomoc.

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: poniedziałek, 4 lipca 2011, 19:51
przez Cyfrowy Baron
Masz ewidentnie jakiś błąd z Form2, ale nie podałeś dość informacji, by można było ten błąd zlokalizować. Jeżeli to projekt w C++Builder 2010 to wrzuć go do załącznika, tylko usuń z niego pliki tymczasowe.

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: wtorek, 5 lipca 2011, 08:41
przez butchermw
Zauważyłem że gdy wpisuje Form2->Edit1->Text w funkcji stworzonej prze zemnie typu void to mam właśnie ten błąd a jak wpiszę w np. przycisku Edit1->Text to jest OK, czym to może być spowodowane??

KOD Form2
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;

//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void bazazam()
{
        //TU JEST PROBLEM//
        Form2->ADODataSet1->CommandText="select lp, nr_zamowienia, odbiorca, nr_zlecenia, data_1, data_2, data_3, stan_zam from rz_baza_zamowien where lp like '%"+Form2->Edit1->Text+"%' and nr_zamowienia like '%"+Form2->Edit2->Text+"%' and odbiorca like '%"+Form2->Edit3->Text+"%' and nr_zlecenia like '%"+Form2->Edit4->Text+"%' and data_1 like '%"+Form2->Edit5->Text+"%'and data_2 like '%"+Form2->Edit6->Text+"%' and data_3 like '%"+Form2->Edit7->Text+"%' and stan_zam like '%"+Form2->ComboBox1->Text+"%'  ";
        Form2->ClientDataSet1->Active=true;
        Form2->ClientDataSet1->Refresh();
}

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
Form1->sform1=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Edit2Change(TObject *Sender)
{
        //TO DZIAŁA//
        ADODataSet1->CommandText="select lp, nr_zamowienia, odbiorca, nr_zlecenia, data_1, data_2, data_3, stan_zam from rz_baza_zamowien where lp like '%"+Edit1->Text+"%' and nr_zamowienia like '%"+Edit2->Text+"%' and odbiorca like '%"+Edit3->Text+"%' and nr_zlecenia like '%"+Edit4->Text+"%' and data_1 like '%"+Edit5->Text+"%'and data_2 like '%"+Edit6->Text+"%' and data_3 like '%"+Edit7->Text+"%' and stan_zam like '%"+ComboBox1->Text+"%'  ";
        ClientDataSet1->Active=true;
        ClientDataSet1->Refresh();
}
//---------------------------------------------------------------------------
 


PS gdy wywołam funkcję bazazam() w przycisku to jest błąd ten co wkleiłem wcześniej

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: wtorek, 5 lipca 2011, 10:25
przez polymorphism
(...) a jak wpiszę w np. przycisku Edit1->Text to jest OK, czym to może być spowodowane??

Tym, że korzystasz ze złej zmiennej globalnej Form2. Zapewne obiekt klasy TForm2 tworzysz w sposób jawny, poprzez new, a taki sposób nie powoduje automatycznego przypisania wskaźnikowi Form2 poprawnego adresu. Zrób funkcję bazazam metodą klasy TForm2 i zapomnij o istnieniu Form2 (a także o istnieniu innych automatycznie wygenerowanych globalnych wskaźnikach FormX).

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: piątek, 8 lipca 2011, 10:19
przez butchermw
W celu przybliżenia problemu, dodam że pracuje na formach MDI i forma 2 jest otwierana po przez skrypt:

KOD cpp:     UKRYJ  
TForm2 *NewForm= new TForm2(Application);
if(!NewForm) return;
NewForm->Caption="Rejestr zamówień";
NewForm->Show();


i chciałem tak zrobić by wszystkie komponenty odpowiedzialne za połączenie z bazą znajdowały się w formie2, programowałem wcześniej w BCB6 na zwykłych formach i tam było wszystko w formie podstawowej i nie było z tym problemu a teraz niestety ale coś mi nie chce to działać, dodatkowo chciałem zrobić oddzielną funkcję w której znajduje się zapytanie do bazy z uwzględnieniem filtrowania po przez użycie komponentu Edit.(skrypt zamieszczony w wcześniejszych wpisach)

Re: Projekt w BCB6 a RAD Studio 2010 C++

Nowy postNapisane: piątek, 8 lipca 2011, 10:40
przez polymorphism
Czyli jest dokładnie tak, jak napisałem. Zatem rozwiązanie, które podałem jest aktualne.

KOD cpp:     UKRYJ  
if(!NewForm) return;

To jest zbędne. new w domyślnej formie nie zwraca NULLa, tylko rzuca wyjątek bad_alloc, jeśli nie może przydzielić pamięci.