ODBC - Execution of instruction " insert " - dBas

If you are using the main C++ distribution of wxWidgets, Feel free to ask any question related to wxWidgets development here. This means questions regarding to C++ and wxWidgets, not compile problems.
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 4524
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Post by ONEEYEMAN » Tue May 10, 2005 9:30 pm

Hi,
The SQL_C_WXCHAR were introduced in the 2.5.4!!! :)
Also this version is fully implements Unicode support for ODBC.

Thank you.

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Wed May 11, 2005 10:23 am

1.
After inscription:

Code: Select all

table->ClearMember( true );
I receive

297 C:\Documents and Settings\prokicki\Pulpit\App\main.cpp 'class wxDbTable' has no member named 'ClearMember'

wxWidgets 2.5.4

2.
I have installed new Dev with wxWidgets 2.5.4
It is compiled SQL_C_WXCHAR, but problem is still.
:( :( :(


help me
P.
forum C++ in polish
cpp.g5.pl

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Wed May 11, 2005 11:41 am

I could try with base possibly Firerbird, but I do not know as configure in system ODBC.
If you could write step after step that me where inscribe it be mums thankful very.
Must not bury user of program in system important .
Except installation of base.
(Woman of blonde can be user :D )
So, that beguile package need know exactly install, write that in (to) in configuration in system ODBC and inscribe that in field Login, password and catalog in program.
Best as if I can be jointed with firerbird base through exemplary program testdb.
forum C++ in polish
cpp.g5.pl

Bundy
I live to help wx-kind
I live to help wx-kind
Posts: 153
Joined: Fri Apr 29, 2005 9:46 am
Location: Poland

I do this like this

Post by Bundy » Wed May 11, 2005 1:16 pm

I do this like this and it works. I see only two diffrence:
1. I use SQL_C_WXCHAR
2. I use 'like' instead of '='

I understand that you lookedinto base after insert new record and You are sure that you add record into base. So mayby You mark all instructions that insert data to base and leave only this code witch select data from base?

Code: Select all

wxString memo="";
wxDbConnectInf *DbConnectInf = new wxDbConnectInf(NULL,DNS,user,pass,"");
   
    if (!DbConnectInf->AllocHenv())
    {
        wxMessageBox("Unable to allocate an ODBC environment handle",
                     "DB CONNECTION ERROR", wxOK | wxICON_EXCLAMATION);
        return;
    } 

    wxDb *db = new wxDb(DbConnectInf->GetHenv());
    if(!db->Open(DbConnectInf))
      {
        wxMessageBox("Blad przy otwieraniu polaczenia", "DB CONNECTION ERROR", wxOK | wxICON_EXCLAMATION);      
        return;
      }  

    wxDbTable *table;
    table = new wxDbTable(db, "t", 2);

    wxChar jeden[50+1]; 
    wxChar dwa[50+1]; 
    
    table->SetColDefs(0, wxT("id"), DB_DATA_TYPE_VARCHAR, jeden,
               SQL_C_WXCHAR, sizeof(jeden), true, true);
    table->SetColDefs(1, wxT("plikpdf"), DB_DATA_TYPE_VARCHAR, dwa,
                SQL_C_WXCHAR, sizeof(dwa), false, true);
    
    if (!table->Open())
    {
        memo=memo+"blad open\n" ;               
    }
 
    table->SetWhereClause(wxT("plikpdf like '%'"));
    table->SetOrderByClause(wxT("plikpdf"));
    table->SetFromClause(wxT(""));
    
    if (!table->Query())
    {   
         memo=memo+"blad query\n" ;
    }   
    
    while (table->GetNext())
    {
        memo=memo+wxString::Format("%d",table->GetRowNum())+" | "+jeden+" | "+dwa+"\n";
    }
    WxMemo1->SetValue(memo);

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Wed May 11, 2005 2:21 pm

Cześć Polak :-)

Sprawa wygłada tak, że Moge wykonywać instrukcje tworzenia tablei, mogę wykonywać insert, ale nie moge wybrac danych przyrownujac do danej wartości. Z "like" r
forum C++ in polish
cpp.g5.pl

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 4524
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Post by ONEEYEMAN » Wed May 11, 2005 7:48 pm

Hi,
I am sorry, the function name is ClearMemberVars();
It suppose to clear the variables that will hold the data of the SQL operation.

I am so sorry.

BTW, you English is very good, I would say even perfect. :) Sorry, I could read Polish, but couldn't write on it.

Thank you.

Bundy
I live to help wx-kind
I live to help wx-kind
Posts: 153
Joined: Fri Apr 29, 2005 9:46 am
Location: Poland

Post by Bundy » Thu May 12, 2005 6:47 am

I use PostgreSQL 8. You can get it from site:

http://www.postgresql.org/ftp/win32/

(take file "postgresql-8.0.2.zip")

It is easy to instal (on windows xp), just remember what user name and password you type. Instal as a service.

Than in odbc you must just put this username, pasword, and database name.

in polish:

pobierz postgres8 ze stronki. Zainstaluj jako service, podaj haslo, reszte zostaw, zapamietaj haslo. Po instalacji stworz sobie baze za pomoca PgAdminIII (Programy->PostgreSql 8.0). Stworz w bazie tabele i kolumny (ja ustawilem typ na "varchar") W odbc dodaj DSN (sterownik PostgreSQL)Wpisz nazwe tabeli w description i databse, server to localhost, username to postgres a haslo to twoje haslo

Reszta powinna pujsc gladko :)

Moj kod do odczytania wartosci:

Code: Select all

wxDbTable *table;
    table = new wxDbTable(db, "t", 2);
    
    wxChar jeden[50+1]; 
    wxChar dwa[50+1]; 
    
    table->SetColDefs(0, wxT("id"), DB_DATA_TYPE_VARCHAR, jeden,
               SQL_C_WXCHAR, sizeof(jeden), false, true);
    table->SetColDefs(1, wxT("plikpdf"), DB_DATA_TYPE_VARCHAR, dwa,
                SQL_C_WXCHAR, sizeof(dwa), false, true); 
                       
    if (!table->Open())
      {
         WxMemo2->SetValue("Blad open"); 
         return;             
      }     
         
    if (!table->QueryBySqlStmt("select * from t"))
      {   
        WxMemo2->SetValue("Blad query");
        return; 
      }
      
    wxString memo;                  
    while (table->GetNext())
    {
        memo=memo+wxString::Format("%d",table->GetRowNum())+" | "+jeden+" | "+dwa+"\n";
    }
    WxMemo2->SetValue(memo); 
[/code]

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 10:16 am

Bundy wrote:I use PostgreSQL 8. You can get it from site:


in polish:

pobierz postgres8 ze stronki. Zainstaluj jako service, podaj haslo, reszte zostaw, zapamietaj haslo. Po instalacji stworz sobie baze za pomoca PgAdminIII (Programy->PostgreSql 8.0). Stworz w bazie tabele i kolumny (ja ustawilem typ na "varchar") W odbc dodaj DSN (sterownik PostgreSQL)Wpisz nazwe tabeli w description i databse, server to localhost, username to postgres a haslo to twoje haslo

Reszta powinna pujsc gladko :)

no tak, postgre juz dawno pobralem i zainstalowalem, mam uzytkownika
postgres i haslo. Poprzez PgAdmina utworzylem nowego uzytkownika
(tego ktorego wpisza uztkownicy danej aplikacji - jezeli bedzie dzialac
w sieci) haslo i baze (pusta). Chcialbym teraz aby tabela zostala utworzona poprzez program, przez uzytkownika ktory jako pierwszy
sie polaczy z baza (przy zalozeniu ze wiecej osob pracuje na jednym) badz jezeli bedzie sam pracowac jako jedyny utworzy z poziomu aplikacji.
Nie chcialbym aby taki czlowiek tworzyl tabele PgAdminem gdyz
1. moze to byc kobieta, co jest bardzo prawdopodobne
2. chce umozliwic prace na kilku bazach, pozostawie ten wybor uzytkownikowi.

w programie bedzie mozna wybrac (tak jak w dbdemo) DNS z listy,
wpisac Uzytkownika (jezeli wymagany) , haslo i Catalog.
A wszystkie tabele zostana utworzone w danej bazie same.
Uzytkownik ograncza sie do zainstalowania PSQL serwer,
utworzenie uzytkownika, haslo i stworzenie samej pustej bazy.

Jak w takim przypadku powinno byc wszystko poustawiane?
Jezeli z tym mi pomozesz to jestes wielki! :-)


I apologize other for lack of english, but since it already pole pick out explain problem in polish :-)

As that , it is possible to try it translate on part http://translate.pl

P.
forum C++ in polish
cpp.g5.pl

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 10:19 am

ONEEYEMAN wrote:Hi,


BTW, you English is very good, I would say even perfect. :) Sorry, I could read Polish, but couldn't write on it.

Thank you.
:-)
I have similar with english. That blaze more or less understand read, it blaze with writing and on voice reading.
forum C++ in polish
cpp.g5.pl

Bundy
I live to help wx-kind
I live to help wx-kind
Posts: 153
Joined: Fri Apr 29, 2005 9:46 am
Location: Poland

Post by Bundy » Thu May 12, 2005 11:47 am

Wszystkie tabele możesz utworzyc wykonując po prostu qwerendy w programie. Tzn. uzytkownik instaluje sobie postgres i robi pusta baze. Teraz musi tylko odpalic Twoj program. Wybierze z menu "polacz z baza", wyskakuje okienko, wybiera dns, wpisuje nazwe i haslo i wciska ok. Teraz program laczy sie z baza, sprawdza czy istnieja potrzebne tabele. Jesli jakiejs tabeli nie ma to wykonuje zapytanie tworzace ja.

if ( !db->TableExists("nazwa tabeli","uzytkownik","") )
{
//tworz tabele
}

Pozdrawiam
Bundy

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 1:02 pm

Bundy wrote:Wszystkie tabele możesz utworzyc wykonując po prostu qwerendy w programie. Tzn. uzytkownik instaluje sobie postgres i robi pusta baze. Teraz musi tylko odpalic Twoj program. Wybierze z menu "polacz z baza", wyskakuje okienko, wybiera dns, wpisuje nazwe i haslo i wciska ok. Teraz program laczy sie z baza, sprawdza czy istnieja potrzebne tabele. Jesli jakiejs tabeli nie ma to wykonuje zapytanie tworzace ja.

if ( !db->TableExists("nazwa tabeli","uzytkownik","") )
{
//tworz tabele
}

Pozdrawiam
Bundy
rozumiem. Juz sie polaczylem z baza, nie wiem czy bede tworzyc tabele,
w programie czy przygotuje dla administartora zapytanie (kilkadziesiat tabel) ale pojawily sie nowe problemy,

1. czy wxWidgets zamienia wszystkie pola i nazwy tabel na male litery?
bo silnik odbc wyrzuca zawsze blad, dopiero jak zmienie w bazie
poprzez PgAdmina wzystkie nazwy na male litery to jest ok.
Da się zmusic wx aby nie zamienial liter?

2. jak juz sie polaczylemi otworzylem tabele, nie moglem wstawic danych wyswietlil sie komunikat odbc:

SQLstate = S1000
Native Error Code = 7
ivalid byte sequence for encoding "UNICODE" : 0xe6

Tabele w pgAdmin ustawilem na UNICODE, czy to zle?,
czy cos w kodzie nalezy zmienic?


Pozdrawiam

P.

ps.
mam nadzieje ze to juz ostatnia niespodzianka jaka mnie spotkala.
forum C++ in polish
cpp.g5.pl

Bundy
I live to help wx-kind
I live to help wx-kind
Posts: 153
Joined: Fri Apr 29, 2005 9:46 am
Location: Poland

Post by Bundy » Thu May 12, 2005 1:15 pm

Nie wiem czy zmienia na male litery, nigdy nie bylo to dla mnie wazne.
Natomiast jesli chodzi o blad przy wstawianiu danych to po prostu zobacz czy bedzie dzialalo jak ustawisz tabele tak jak byla. Ja nigdy nie ustawialem opcji unicode. W ogole nic nie ustawialem poza nazwa, kolumnami i ewentualnie dostepem :?

Pozdrawiam

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 1:30 pm

strzelam: byc moze dlatego tak sie dzieje gdyz mam w funkcjio onInit ustawione wxLocal na pl.
forum C++ in polish
cpp.g5.pl

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 1:48 pm

no i znowu problem :cry:

Komunikat przy wykonaniu insert:
SQL State = S1000
Native error code =7
syntax error at or near Moja at charakter 265

i teraz tak, dla testow wrzucam przykladowa wartosc, tu:

pole:

Code: Select all

  wxChar PSymbol[100];

 table->SetColDefs(0, wxT("Symbol"), DB_DATA_TYPE_VARCHAR, PSymbol, 
                   SQL_C_WXCHAR, sizeof(PSymbol), true, true);
wrzucam wartosc:

Code: Select all

wxStrcpy(PSymbol, wxT("Moja druga wartość"));

o co mu tym razem chodzi?

P.
forum C++ in polish
cpp.g5.pl

prokicki
Knows some wx things
Knows some wx things
Posts: 47
Joined: Fri Jan 21, 2005 9:53 am
Contact:

Post by prokicki » Thu May 12, 2005 2:01 pm

a jeszcze moglbys sie pofatygowac, odpalic pgAmina i sprawdzic klikajac na baze, wlasciwosci jakie kodowanie masz ustawione?
forum C++ in polish
cpp.g5.pl

Post Reply