1//---------------------------------------------------------------------------------------- 2// Name: BrowserDB.h,cpp 3// Purpose: a wxDB class 4// Author: Mark Johnson 5// Modified by: 6// Created: 19991127.mj10777 7// Copyright: (c) Mark Johnson 8// Licence: wxWindows license 9// RCS-ID: $Id: browsedb.cpp 35650 2005-09-23 12:56:45Z MR $ 10//---------------------------------------------------------------------------------------- 11 12// For compilers that support precompilation, includes "wx/wx.h". 13#include "wx/wxprec.h" 14//---------------------------------------------------------------------------------------- 15#ifdef __BORLANDC__ 16#pragma hdrstop 17#endif 18//---------------------------------------------------------------------------------------- 19#ifndef WX_PRECOMP 20#include "wx/wx.h" 21#endif 22//---------------------------------------------------------------------------------------- 23#include "std.h" 24//---------------------------------------------------------------------------------------- 25// Global structure for holding ODBC connection information 26wxDbConnectInf DbConnectInf; 27 28#if !wxUSE_ODBC 29 #error Demo cannot be compiled unless setup.h has wxUSE_ODBC set to 1 30#endif 31 32//---------------------------------------------------------------------------------------- 33extern WXDLLEXPORT_DATA(wxDbList*) PtrBegDbList; /* from db.cpp, used in getting back error results from db connections */ 34 35//---------------------------------------------------------------------------------------- 36wxChar *GetExtendedDBErrorMsg(wxChar *ErrFile, int ErrLine) 37{ 38 static wxString msg; 39 wxString tStr; 40 if (ErrFile || ErrLine) 41 { 42 msg += _T("File: "); 43 msg += ErrFile; 44 msg += _T(" Line: "); 45 tStr.Printf(_T("%d"),ErrLine); 46 msg += tStr.GetData(); 47 // msg += _T("\n"); 48 } 49 msg.Append (_T("\nODBC errors:\n")); 50 // msg += _T("\n"); 51 /* Scan through each database connection displaying 52 * any ODBC errors that have occurred. */ 53 wxDbList *pDbList; 54 for (pDbList = PtrBegDbList; pDbList; pDbList = pDbList->PtrNext) 55 { 56 // Skip over any free connections 57 if (pDbList->Free) 58 continue; 59 // Display errors for this connection 60 for (int i = 0; i < DB_MAX_ERROR_HISTORY; i++) 61 { 62 if (pDbList->PtrDb->errorList[i]) 63 { 64 msg.Append(pDbList->PtrDb->errorList[i]); 65 if (wxStrcmp(pDbList->PtrDb->errorList[i],wxEmptyString) != 0) 66 msg.Append(_T("\n")); 67 } 68 } 69 } 70 msg += _T("\n"); 71 return (wxChar*) (const wxChar*) msg; 72} // GetExtendedDBErrorMsg 73 74//---------------------------------------------------------------------------------------- 75BrowserDB::BrowserDB() 76{ 77 PointerToNULL(0); 78 ODBCSource = wxEmptyString; // ODBC data source name (created with ODBC Administrator under Win95/NT) 79 UserName = wxEmptyString; // database username - must already exist in the data source 80 Password = wxEmptyString; // password database username 81 OnFillSqlTyp(); 82 OnFilldbTyp(); 83} // BrowserDB Constructor 84 85//---------------------------------------------------------------------------------------- 86BrowserDB::~BrowserDB() 87{ 88 PointerToNULL(1); // Clean up Tables and Databases (Commit, Close and delete) 89} // BrowserDB destructor 90 91//---------------------------------------------------------------------------------------- 92bool BrowserDB::Initialize(int Quiet) 93{ 94 if (!OnStartDB(Quiet)) 95 { 96 wxLogMessage(_("\n\n-E-> BrowserDB::OnStartDB(%s) : Failed ! "),ODBCSource.c_str()); 97 return false; 98 } 99 return true; 100} // BrowserDB:Initialize 101 102//---------------------------------------------------------------------------------------- 103bool BrowserDB::OnStartDB(int Quiet) 104{ 105 wxStopWatch sw; 106 if (!Quiet) 107 wxLogMessage(_("\n-I-> BrowserDB::OnStartDB(%s) : Begin "),ODBCSource.c_str()); 108 if (db_BrowserDB != NULL) 109 { 110 if (!Quiet) 111 wxLogMessage(_("\n-I-> BrowserDB::OnStartDB() : DB is already open.")); 112 return true; 113 } 114 115 DbConnectInf.AllocHenv(); 116 117 //--------------------------------------------------------------------------------------- 118 // Connect to datasource 119 //--------------------------------------------------------------------------------------- 120 DlgUser *p_Dlg; 121 p_Dlg = new DlgUser(pDoc->p_MainFrame,pDoc,wxEmptyString); 122 p_Dlg->s_DSN = ODBCSource; 123 p_Dlg->s_User = UserName; 124 p_Dlg->s_Password = Password; 125 p_Dlg->OnInit(); 126 p_Dlg->Fit(); 127 128 bool OK = false; 129 if (p_Dlg->ShowModal() == wxID_OK) 130 { 131 (pDoc->p_DSN+i_Which)->Usr = p_Dlg->s_User; 132 (pDoc->p_DSN+i_Which)->Pas = p_Dlg->s_Password; 133 UserName = p_Dlg->s_User; 134 Password = p_Dlg->s_Password; 135 OK = true; 136 } 137 delete p_Dlg; 138 if (OK) 139 { 140 //-------------------------------------------------------------------------------------- 141 DbConnectInf.SetDsn(ODBCSource); // ODBC data source name (created with ODBC Administrator under Win95/NT) 142 DbConnectInf.SetUserID(UserName); // database username - must already exist in the data source 143 DbConnectInf.SetPassword(Password); // password database username 144 db_BrowserDB = wxDbGetConnection(&DbConnectInf); 145 // wxLogMessage(">>>%s<<<>>>%s<<<",UserName.c_str(),Password.c_str()); 146 if (db_BrowserDB == NULL) 147 { 148 DbConnectInf.SetDsn(wxEmptyString); 149 DbConnectInf.SetUserID(wxEmptyString); 150 DbConnectInf.SetPassword(wxEmptyString); 151 if (!Quiet) 152 { 153 wxLogMessage(_("\n-E-> BrowserDB::OnConnectDataSource() DB CONNECTION ERROR : Unable to connect to the data source.\n\nCheck the name of your data source to verify it has been correctly entered/spelled.\n\nWith some databases, the user name and password must\nbe created with full rights to the table prior to making a connection\n(using tools provided by the database manufacturer)")); 154 wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time()); 155 } 156 DbConnectInf.FreeHenv(); 157 return false; 158 } 159 //-------------------------------------------------------------------------------------- 160 if (!Quiet) 161 { 162 Temp1 = db_BrowserDB->GetDatabaseName(); 163 Temp2 = db_BrowserDB->GetDataSource(); 164 wxLogMessage(_("-I-> BrowserDB::OnGetDataSourceODBC() - DatabaseName(%s) ; DataSource(%s)"),Temp1.c_str(),Temp2.c_str()); 165 wxLogMessage(_("-I-> BrowserDB::OnStartDB(%s) : End - Time needed : %ld ms"),ODBCSource.c_str(),sw.Time()); 166 } 167 return true; 168 } 169 else 170 { 171 DbConnectInf.FreeHenv(); 172 return false; 173 } 174} 175 176//---------------------------------------------------------------------------------------- 177bool BrowserDB::OnCloseDB(int Quiet) 178{ 179 if (!Quiet) 180 wxLogMessage(_("-I-> BrowserDB::OnCloseDB() : Begin ")); 181 if (db_BrowserDB) 182 { 183// db_BrowserDB->Close(); 184 wxDbFreeConnection(db_BrowserDB); 185 186 DbConnectInf.FreeHenv(); 187 188 db_BrowserDB = NULL; 189 } 190 if (!Quiet) 191 wxLogMessage(_("\n-I-> BrowserDB::OnCloseDB() : End ")); 192 return true; 193} 194 195//---------------------------------------------------------------------------------------- 196bool BrowserDB::OnGetNext(int Cols,int WXUNUSED(Quiet)) 197{ 198 SDWORD cb; 199 int i_dbDataType; 200 wxChar s_temp[1024+1]; 201 long l_temp; 202 double f_temp; 203 int AnzError=0; 204 TIMESTAMP_STRUCT t_temp; 205 wxString Temp0; 206 //----------------------------- 207 if (!db_BrowserDB->GetNext()) 208 { 209#ifdef __WXDEBUG__ 210 Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext \n-E-> ")); 211 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 212 wxLogMessage(Temp0); 213 wxMessageBox(Temp0); 214#endif 215 return false; 216 } 217 else 218 { 219 int i; 220 for (i=0;i<Cols;i++) 221 { 222 wxStrcpy((cl_BrowserDB+i)->tableName,_T("-E->")); 223 i_dbDataType = (cl_BrowserDB+i)->pColFor->i_dbDataType; 224 if (i_dbDataType == 0) // Filter unsupported dbDataTypes 225 { 226 if (((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_VARCHAR) || 227 ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_LONGVARCHAR)) 228 i_dbDataType = DB_DATA_TYPE_VARCHAR; 229 if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_DATE) 230 i_dbDataType = DB_DATA_TYPE_DATE; 231 if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_BIT) 232 i_dbDataType = DB_DATA_TYPE_INTEGER; 233 if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_NUMERIC) 234 i_dbDataType = DB_DATA_TYPE_VARCHAR; 235 if ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_REAL) 236 i_dbDataType = DB_DATA_TYPE_FLOAT; 237 } 238 if ((i_dbDataType == DB_DATA_TYPE_INTEGER) && 239 ((cl_BrowserDB+i)->pColFor->i_sqlDataType == SQL_C_DOUBLE)) 240 { // DBASE Numeric 241 i_dbDataType = DB_DATA_TYPE_FLOAT; 242 } 243 switch(i_dbDataType) 244 { 245 case DB_DATA_TYPE_VARCHAR: 246 wxStrcpy(s_temp,wxEmptyString); 247 if (!db_BrowserDB->GetData((UWORD)(i+1),(SWORD)((cl_BrowserDB+i)->pColFor->i_dbDataType),&s_temp[0],sizeof(s_temp), &cb)) 248 { 249 Temp0.Printf(_("\n-E-> BrowserDB::OnGetNext - ODBC-Error with GetNext of >%s<.\n-E-> "),(cl_BrowserDB+i)->tableName); 250 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 251 wxLogMessage(Temp0); 252 } 253 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,s_temp); 254 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 255 break; 256 case DB_DATA_TYPE_INTEGER: 257 l_temp = 0; 258 if (!db_BrowserDB->GetData((UWORD)(i+1),(SWORD)((cl_BrowserDB+i)->pColFor->i_sqlDataType),&l_temp,sizeof(l_temp), &cb)) 259 { 260 Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); 261 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 262 } 263 else 264 { 265 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,l_temp); 266 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 267 } 268 break; 269 case DB_DATA_TYPE_FLOAT: 270 f_temp = 0; 271 if (!db_BrowserDB->GetData((UWORD)(i+1),(SWORD)((cl_BrowserDB+i)->pColFor->i_sqlDataType),&f_temp,sizeof(f_temp), &cb)) 272 { 273 Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); 274 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 275 wxMessageBox(Temp0); 276 } 277 else 278 { 279 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,f_temp); 280 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 281 } 282 break; 283 case DB_DATA_TYPE_DATE: 284 t_temp.day = 0; 285 t_temp.month = 0; 286 t_temp.year = 0; 287 t_temp.hour = 0; 288 t_temp.minute = 0; 289 t_temp.second = 0; 290 t_temp.fraction = 0; 291 if (!db_BrowserDB->GetData((UWORD)(i+1),(SWORD)((cl_BrowserDB+i)->pColFor->i_sqlDataType),&t_temp,sizeof(t_temp), &cb)) 292 { 293 Temp0.Printf(_("\n-E-> BrowserDB::OnGetData - ODBC-Error with GetNext \n-E-> ")); 294 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 295 } 296 else 297 { 298 // i_Nation = 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US 299 if (((cl_BrowserDB+i)->pColFor->i_Nation == 0) || // TS YYYY-MM-DD 300 ((cl_BrowserDB+i)->pColFor->i_Nation == 3)) // IT YYYY-MM-DD 301 { 302 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.year,t_temp.month,t_temp.day, 303 t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); 304 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 305 } 306 if (((cl_BrowserDB+i)->pColFor->i_Nation == 1) || // EU DD.MM.YYYY 307 ((cl_BrowserDB+i)->pColFor->i_Nation == 2)) // UK DD/MM/YYYY 308 { 309 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.day,t_temp.month,t_temp.year, 310 t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); 311 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 312 } 313 if ((cl_BrowserDB+i)->pColFor->i_Nation == 3) // US MM/DD/YYYY 314 { 315 Temp0.Printf((cl_BrowserDB+i)->pColFor->s_Field,t_temp.month,t_temp.day,t_temp.year, 316 t_temp.hour, t_temp.minute, t_temp.second, t_temp.fraction); 317 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 318 } 319 } 320 break; 321 default: 322 AnzError++; 323 if (AnzError <= 100) 324 { 325 Temp0 = (cl_BrowserDB+i)->colName; 326 wxLogMessage(_("-E-> BrowserDB::OnGetNext - DB_DATA_TYPE_?? (%d) in Col(%s)"),(cl_BrowserDB+i)->pColFor->i_dbDataType,Temp0.c_str()); 327 } 328 else 329 return true; 330 Temp0.Printf(_("-E-> unknown Format(%d) - sql(%d)"),(cl_BrowserDB+i)->pColFor->i_dbDataType,(cl_BrowserDB+i)->pColFor->i_sqlDataType); 331 wxStrcpy((cl_BrowserDB+i)->tableName,Temp0.c_str()); 332 break; 333 }; // switch 334 } // for 335 } // else 336 337 return true; 338} 339 340//---------------------------------------------------------------------------------------- 341bool BrowserDB::OnSelect(wxString tb_Name, int Quiet) 342{ 343 wxStopWatch sw; 344 wxString SQLStmt; 345 i_Records = 0; 346 //--------------------------------------------------------------------------------------- 347 wxString tablename = db_BrowserDB->SQLTableName(tb_Name.c_str()); 348 SQLStmt.sprintf(_T("SELECT * FROM %s"),tablename.c_str()); 349 if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData()))) 350 { 351 Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); 352 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 353 wxLogMessage(Temp0); 354 wxMessageBox(_T("-E-> BrowserDB::OnSelect - GetData()")); 355 return false; 356 } 357 //--------------------------------------------------------------------------------------- 358 while (db_BrowserDB->GetNext()) 359 { 360 i_Records++; 361 } 362 //--------------------------------------------------------------------------------------- 363 if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData()))) 364 { 365 Temp0.Printf(_("\n-E-> BrowserDB::OnSelect - ODBC-Error with ExecSql of >%s<.\n-E-> "),tb_Name.c_str()); 366 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 367 wxLogMessage(Temp0); 368 return false; 369 } 370 //--------------------------------------------------------------------------------------- 371 // SetColDefs ( 0, "NAME", DB_DATA_TYPE_VARCHAR, Name, SQL_C_WXCHAR, sizeof(Name), true, true); // Primary index 372 //--------------------------------------------------------------------------------------- 373 if (!Quiet) 374 { 375 wxLogMessage(_("\n-I-> BrowserDB::OnSelect(%s) Records(%d): End - Time needed : %ld ms"),tb_Name.c_str(),i_Records,sw.Time()); 376 } 377 return true; 378} 379 380//---------------------------------------------------------------------------------------- 381bool BrowserDB::OnExecSql(wxString SQLStmt, int Quiet) 382{ 383 //--------------------------------------------------------------------------------------- 384 if (!db_BrowserDB->ExecSql((wxChar *)(SQLStmt.GetData()))) 385 { 386 Temp0.Printf(_("\n-E-> BrowserDB::OnExecSQL - ODBC-Error with ExecSql of >%s<.\n-E-> "),SQLStmt.c_str()); 387 Temp0 += GetExtendedDBErrorMsg(__TFILE__,__LINE__); 388 if (!Quiet) 389 wxLogMessage(Temp0); 390 else 391 wxMessageBox(_T("-E-> BrowserDB::OnExecSql - ExecSql()")); 392 return false; 393 } 394 if (!Quiet) 395 { 396 // wxLogMessage(_("\n-I-> BrowserDB::OnExecSql(%s) - End - Time needed : %ld ms"),SQLStmt.c_str(),sw.Time()); 397 } 398 return true; 399} 400 401//---------------------------------------------------------------------------------------- 402wxDbInf* BrowserDB::OnGetCatalog(int WXUNUSED(Quiet)) 403{ 404 wxChar UName[255]; 405 wxStrcpy(UName,UserName); 406 ct_BrowserDB = db_BrowserDB->GetCatalog(UName); 407 return ct_BrowserDB; 408} 409 410//---------------------------------------------------------------------------------------- 411wxDbColInf* BrowserDB::OnGetColumns(wxChar *tableName, UWORD numCols, int WXUNUSED(Quiet)) 412{ 413 wxChar UName[255]; 414 int i; 415 wxStrcpy(UName,UserName); 416 cl_BrowserDB = db_BrowserDB->GetColumns(tableName,&numCols,UName); 417// cl_BrowserDB->pColFor = new wxDbColFor[numCols]; 418 for (i=0;i<numCols;i++) 419 { 420// (cl_BrowserDB->pColFor+i)->Format(1,(cl_BrowserDB+i)->dbDataType,(cl_BrowserDB+i)->sqlDataType, 421// (cl_BrowserDB+i)->columnSize, (cl_BrowserDB+i)->decimalDigits); 422 (cl_BrowserDB+i)->pColFor = new wxDbColFor; 423 (cl_BrowserDB+i)->pColFor->Format(1, 424 (cl_BrowserDB+i)->dbDataType, 425 (cl_BrowserDB+i)->sqlDataType, 426 (cl_BrowserDB+i)->columnLength, 427 (cl_BrowserDB+i)->decimalDigits); 428 } 429 return cl_BrowserDB; 430} 431 432//---------------------------------------------------------------------------------------- 433void BrowserDB::PointerToNULL(int Art) 434{ 435 if (Art == 1) // L�schen 436 { 437 if (cl_BrowserDB != NULL) 438 { // Destroy the memory 439 delete [] cl_BrowserDB; 440 } 441 if (ct_BrowserDB != NULL) 442 { // Destroy the memory 443 delete [] ct_BrowserDB; 444 } 445 if (db_BrowserDB != NULL) 446 { 447 db_BrowserDB->CommitTrans(); 448 db_BrowserDB->Close(); 449 wxDbCloseConnections(); 450 delete db_BrowserDB; 451 } 452 } 453 cl_BrowserDB = NULL; 454 ct_BrowserDB = NULL; 455 db_BrowserDB = NULL; 456 p_LogWindow = NULL; 457} 458 459//---------------------------------------------------------------------------------------- 460void BrowserDB::OnFillSqlTyp() 461{ 462 i_SqlTyp[1] = SQL_C_BINARY; s_SqlTyp[1] = _T("SQL_C_BINARY"); 463 i_SqlTyp[2] = SQL_C_BIT; s_SqlTyp[2] = _T("SQL_C_BIT"); 464 i_SqlTyp[3] = SQL_C_BOOKMARK; s_SqlTyp[3] = _T("SQL_C_BOOKMARK"); 465 i_SqlTyp[4] = SQL_C_WXCHAR; s_SqlTyp[4] = _T("SQL_C_WXCHAR"); 466 i_SqlTyp[5] = SQL_C_DATE; s_SqlTyp[5] = _T("SQL_C_DATE"); 467 i_SqlTyp[6] = SQL_C_DEFAULT; s_SqlTyp[6] = _T("SQL_C_DEFAULT"); 468 i_SqlTyp[7] = SQL_C_DOUBLE; s_SqlTyp[7] = _T("SQL_C_DOUBLE"); 469 i_SqlTyp[8] = SQL_C_FLOAT; s_SqlTyp[8] = _T("SQL_C_FLOAT"); 470 i_SqlTyp[9] = SQL_C_LONG; s_SqlTyp[9] = _T("SQL_C_LONG"); 471 i_SqlTyp[10] = SQL_C_SHORT; s_SqlTyp[10] = _T("SQL_C_SHORT"); 472 i_SqlTyp[11] = SQL_C_SLONG; s_SqlTyp[11] = _T("SQL_C_SLONG"); 473 i_SqlTyp[12] = SQL_C_SSHORT; s_SqlTyp[12] = _T("SQL_C_SSHORT"); 474 i_SqlTyp[13] = SQL_C_STINYINT; s_SqlTyp[13] = _T("SQL_C_STINYINT"); 475 i_SqlTyp[14] = SQL_C_TIME; s_SqlTyp[14] = _T("SQL_C_TIME"); 476 i_SqlTyp[15] = SQL_C_TIMESTAMP; s_SqlTyp[15] = _T("SQL_C_TIMESTAMP"); 477 i_SqlTyp[16] = SQL_C_TINYINT; s_SqlTyp[16] = _T("SQL_C_TINYINT"); 478 i_SqlTyp[17] = SQL_C_ULONG; s_SqlTyp[17] = _T("SQL_C_ULONG"); 479 i_SqlTyp[18] = SQL_C_USHORT; s_SqlTyp[18] = _T("SQL_C_USHORT"); 480 i_SqlTyp[19] = SQL_C_UTINYINT; s_SqlTyp[19] = _T("SQL_C_UTINYINT"); 481 i_SqlTyp[20] = SQL_VARCHAR; s_SqlTyp[20] = _T("SQL_VARCHAR"); 482 i_SqlTyp[21] = SQL_NUMERIC; s_SqlTyp[21] = _T("SQL_NUMERIC"); 483 i_SqlTyp[22] = SQL_LONGVARCHAR; s_SqlTyp[22] = _T("SQL_LONGVARCHAR"); 484 i_SqlTyp[23] = SQL_REAL; s_SqlTyp[23] = _T("SQL_REAL"); 485 i_SqlTyp[0] = 23; s_SqlTyp[0] = wxEmptyString; 486} 487 488//---------------------------------------------------------------------------------------- 489void BrowserDB::OnFilldbTyp() 490{ 491 i_dbTyp[1] = DB_DATA_TYPE_VARCHAR; s_dbTyp[1] = _T("DB_DATA_TYPE_VARCHAR"); 492 i_dbTyp[2] = DB_DATA_TYPE_INTEGER; s_dbTyp[2] = _T("DB_DATA_TYPE_INTEGER"); 493 i_dbTyp[3] = DB_DATA_TYPE_FLOAT; s_dbTyp[3] = _T("DB_DATA_TYPE_FLOAT"); 494 i_dbTyp[4] = DB_DATA_TYPE_DATE; s_dbTyp[4] = _T("DB_DATA_TYPE_DATE"); 495 i_dbTyp[0] = 4; s_dbTyp[0] = wxEmptyString; 496} 497//---------------------------------------------------------------------------------------- 498