Skocz do zawartości
Doombringer

Help Z C++

Rekomendowane odpowiedzi

Witam.

Nie wiem, może ten temat już był. Jeśli tak to zgarne pewnie wszystkie kary jakie są. ale nie ważne. Potrzebuje pomocy i to szybki.

 

Od niedawnego czasu programuje w C++ Builderze. Potrzebuje połączyć program z baza danych. Jakie funkcje i jak to zrobić wiem.

Jest jednak jeden problem Wyszystkie funkcje obsługi Mysql mają najważniejsze dla mnie zmienne typu const *char.

nawet funkcja wysyłająca zapytanie do bazy. Programy wykorzystują łańcuchy znaków.

 

Może ktoś wie jak przekonwertować *char do const *char albo jak dane z pol w builderze wpisywać w funkcje obsługujące mysql?

To jest jedyna zagadka dla mnie ale uziemia moje tworzenie programów

 

Please Help!!!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

hehe ale wyjechałeś :P

 

char *a = "ble";

const char *b;

 

b = (const char*) a;

funkcja( b ); lub funkcja( (const char*) a );

 

tzw konwersja typów - i wszystko jasne :wink:

[ zakladam, że miałeś na myśli nie 'const *char' a 'const char*' ]

Edytowane przez NetWalker

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

eeeee... afaik powinno dzialac: na zwyklych lancuchach znakow, czyli jak masz wskazniki to *(wsk), albo po prostu "jakis napis"

Chyba nic nie kumam... Mażesz jaśniej. Wiesz już północ, ja w pracy... Szare komórki już śpią :)

 

 

hehe ale wyjechałeś :P

 

char *a = "ble";

const char *b;

 

b = (const char*) a;

funkcja( b ); lub funkcja( (const char*) a );

 

i wszystko jasne :wink:

[ zakladam, że miałeś na myśli nie 'const *char' a 'const char*' ]

 

Dobra to inaczej napisze bo już dziwne rzeczy pisze i nikt mnie nie rozumie :)

 

funkcja mysql_connect:

zmienne:

const char *host, const char *user, const char *passwd

 

Obiekt VCL pod tytułem HostEdit dostaje wartości która jest w: HostEdit->Text

 

Nie powiem jak to dokładnie jest ale zmienna text jest tymu AsciiString czy coś takiego. powiem dokładnie jutro jak z roboty wróce

W każdym bądx razie nie wiem narazie jak to pogodzić...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Obiekt VCL pod tytułem HostEdit dostaje wartości która jest w: HostEdit->Text

Nie znam sie na VCL ale klasa HostEdit->Text [ bo klasą pewnie ona jest tak samo jak CString w MFC ] musi mieć własną funkcje, która zwraca wskaźnik do ciągu znaków [ zakończony zerem ] - poszukaj jej. [ w MFC jest to GetBuffer(min_znakow); ] Edytowane przez NetWalker

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zrodlo: http://www.cppfrance.com/code.aspx?ID=22502

 

Jak widac wszystko jest zrobione na zwyklych lancuchach znakow, a cast w przypadku:

void f(const char *str){  cout << str;}int main(){	 char *napis = new char[10];	 char napis2[] = "aleluja";	 strcpy(napis,"lol");	 f(napis); // tu automatyczny "cast", a wlasciwie jego brak bo to przeciez to samo	 f(napis2); // tak tez dziala	 f("czesc"); // i tak tez	 return 0;}
jest zbedny. Zobacz swoj kod:

char *a = "ble";const char *b;b = (const char*) a; //zupelnie niepotrzebny cast
zarowno a jak i b sa wskaznikami. Ich wartosci to liczby calkowite oznaczajace adres w pamieci. "const" oznacza tylko tyle ze raz zdefiniowanej wartosci zmiennej nie idzie zmienic, ale mimo to wartosci jakie przyjmuja const char *a i char *b, sa takie same i niczym sie nie roznia.

 

wiec absolutnie nie rozumiem NetWalker: "hehe ale wyjechales"

 

I to raczej Ty wyjechales...

char *a = "ble"; <--- tak sie nie przypisuje, fakt dziala, ale to jest brzydko :)

 

a FiDo napisal rozwiazanie problemu autora.

Do Autora: Gdybys od razu napisal ze masz problem z ansistring -> const char* to by bys otrzymal pomoc od razu :) Ty jednak napisales char* -> const char* co jest zupelna glupota.

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A nie zauwazyles, ze chodzi o srodowisko BCB ? Tam nie ma stringow jako char* tylko sa one obudowane w klase AnsiStirng, wiec jesli chcemy przekazac jakis AnsiString do funkcji, ktora przyjmuje char* to trzeba wywolac na tym AnsiString'u metode c_str().

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

FiDo: a czy ja mowie ze nie ? Napisalem przeca ze twoj post jest rozwiazaniem problemu autora. Napisalem po prostu ze z 1 postu tego tematu nie wynika ze autor stosuje ansistringi.

Może ktoś wie jak przekonwertować *char do const *char

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No masz racje cast niepotrzebny - walło mi sie z odwrotnością - wtedy jest wymagany [ z const char* do char* wywala błąd ]

Z klasą miałem racje.

 

char *napis = new char[10];
a Ty nargil też wyjechałeś bo nigdzie nie zwalniasz pamięci dalej :wink:

 

Najważniejsze, że problem jest rozwiązany EOT :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No masz racje cast niepotrzebny - walło mi sie z odwrotnością - wtedy jest wymagany [ z const char* do char* wywala błąd ]

Z klasą miałem racje.

 

char *napis = new char[10];
a Ty nargil też wyjechałeś bo nigdzie nie zwalniasz pamięci dalej :wink:

 

Najważniejsze, że problem jest rozwiązany EOT :)

 

Sorka. Wtedy, kiedy to pisałem byłem lekko półśrednio przytomny wiec wybaczcie. Dzięki za rozwiązanie. Wreszcie rusze dalej.

Jeszcze tylko jedno. BCB jest super ekstra ale ma drobną wade której sam nie usune. Program uruchamia sie po skompilowaniu ale tylko wtedy kiedy uruchamia się go z BCB. Bez niego nie daje się uruchomić be dwóch dll i borlanda. Wie ktoś jak sie pozbyć tego? Bede wdzięczny za pomoc. Pytanie może głupie ale ja dopiero zaczynam z BCB :)

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sorka. Wtedy, kiedy to pisałem byłem lekko półśrednio przytomny wiec wybaczcie. Dzięki za rozwiązanie. Wreszcie rusze dalej.

Jeszcze tylko jedno. BCB jest super ekstra ale ma drobną wade której sam nie usune. Program uruchamia sie po skompilowaniu ale tylko wtedy kiedy uruchamia się go z BCB. Bez niego nie daje się uruchomić be dwóch dll i borlanda. Wie ktoś jak sie pozbyć tego? Bede wdzięczny za pomoc. Pytanie może głupie ale ja dopiero zaczynam z BCB :)

Pozdrawiam

Nie wiem czy moge odpowiedzieć bo mnie ktoś objedzie :wink:

A serio to poszukaj w opcjach projektu - linkowanie statyczne vcl'a [ czy jakoś tak ] - wtedy w pliku wykonywalnym będę także biblioteki właśnie vcl'a [ jeden exe'ec bedzie miał w sobie wszystko ]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Te wszystkie stałe potrzebuje zmieniać. od hosta do zapytania. Musze przyznać ze w PHP o wiele prościej jest to wszystko zrobić.

a moze tak napisac swoja funkcje ?

 

inline void mojafunkcja(ansistring str){   zapytanieSQL(str.c_str());}
albo jeszcze lepiej sprawdz jaki typ zwraca zapytanieSQL i wtedy

inline typ mojafunkcja(ansistring str){  return  zapytanieSQL(str.c_str());}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No wiec Wasze propozycje bardzo mi pomogły. Teraz jednak mam problem z samym builderem. Odkryłem, że oprócz dlli których się już pozbyłem, dołącza do mojej aplikacji kilka plików *.bpl Są one w katalogu windowsa i dopiero na innym kompie to wychodzi. już przeszukiwałem opcje ale nie znalazłem nic jak zrobić żeby wszystko było w moim pliku. Może ktoś zna to środowisko lepiej ?

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...