msql.c | |||
Type | Function | Source | Line |
---|---|---|---|
HB_FUNC | MSQLCONNEC(void)
HB_FUNC( MSQLCONNEC ) /* int msqlConnect(char *) */ { hb_retni( msqlConnect( hb_parc( 1 ) ) ); } | msql.c | 66 |
HB_FUNC | MSQLCLOSE(void)
HB_FUNC( MSQLCLOSE ) /* void msqlClose(int) */ { msqlClose( hb_parni( 1 ) ); } | msql.c | 71 |
HB_FUNC | MSQLSELECT(void)
HB_FUNC( MSQLSELECT ) /* int msqlSelectDB(int, char *) */ { hb_retni( msqlSelectDB( hb_parni( 1 ), hb_parc( 2 ) ) ); } | msql.c | 76 |
HB_FUNC | MSQLQUERY(void)
HB_FUNC( MSQLQUERY ) /* int msqlQuery(int, char *) */ { hb_retni( msqlQuery( hb_parni( 1 ), hb_parc( 2 ) ) ); } | msql.c | 81 |
HB_FUNC | MSQLSTORER(void)
HB_FUNC( MSQLSTORER ) /* m_result *msqlStoreResult() */ { HB_RETPTR( ( void * ) msqlStoreResult() ); } | msql.c | 86 |
HB_FUNC | MSQLFREER(void)
HB_FUNC( MSQLFREER ) /* void msqlFreeResult(m_result *) */ { msqlFreeResult( ( m_result * ) HB_PARPTR( 1 ) ); } | msql.c | 91 |
HB_FUNC | MSQLFETCHR(void)
HB_FUNC( MSQLFETCHR ) /* m_row msqlFetchRow(m_result *, int) */ { m_result * mresult = ( m_result * ) HB_PARPTR( 1 ); int num_fields = hb_parnl( 2 ); PHB_ITEM aRow = hb_itemArrayNew( num_fields ); m_row mrow = msqlFetchRow( mresult ); int i; for( i = 0; i < num_fields; i++ ) hb_arraySetC( aRow, i + 1, mrow[ i ] ); hb_itemReturnRelease( aRow ); } | msql.c | 96 |
HB_FUNC | MSQLDATASE(void)
HB_FUNC( MSQLDATASE ) /* void msqlDataSeek(m_result *, int) */ { msqlDataSeek( ( m_result * ) HB_PARPTR( 1 ), hb_parni( 2 ) ); } | msql.c | 111 |
HB_FUNC | MSQLNUMROW(void)
HB_FUNC( MSQLNUMROW ) /* int msqlNumRows(m_result *) */ { hb_retni( msqlNumRows( ( ( m_result * ) HB_PARPTR( 1 ) ) ) ); } | msql.c | 116 |
HB_FUNC | MSQLFETCHF(void)
HB_FUNC( MSQLFETCHF ) /* m_field *msqlFetchField(m_result *) */ { m_field * mfield = msqlFetchField( ( m_result * ) HB_PARPTR( 1 ) ); PHB_ITEM aField = hb_itemArrayNew( 5 ); /* NOTE: m_field structure of mSQL 2.x has 5 members */ if( mfield ) { hb_arraySetC( aField, 1, mfield->name ); hb_arraySetC( aField, 2, mfield->table ); hb_arraySetNL( aField, 3, mfield->type ); hb_arraySetNL( aField, 4, mfield->length ); hb_arraySetNL( aField, 5, mfield->flags ); } hb_itemReturnRelease( aField ); } | msql.c | 121 |
HB_FUNC | MSQLFIELDS(void)
HB_FUNC( MSQLFIELDS ) /* void msqlFieldSeek(m_result *, int) */ { msqlFieldSeek( ( m_result * ) HB_PARPTR( 1 ), hb_parni( 2 ) ); } | msql.c | 138 |
HB_FUNC | MSQLNUMFIE(void)
HB_FUNC( MSQLNUMFIE ) /* int msqlNumFields(m_result *) */ { hb_retni( msqlNumFields( ( ( m_result * ) HB_PARPTR( 1 ) ) ) ); } | msql.c | 143 |
HB_FUNC | MSQLLISTFI(void)
HB_FUNC( MSQLLISTFI ) /* m_result *msqlListFields(int, char *); */ { HB_RETPTR( ( void * ) msqlListFields( hb_parni( 1 ), hb_parc( 2 ) ) ); } | msql.c | 148 |
HB_FUNC | MSQLGETERR(void)
HB_FUNC( MSQLGETERR ) /* char *msqlGetErrMsg(char *); */ { hb_retc( msqlErrMsg ); } | msql.c | 153 |
HB_FUNC | MSQLLISTDB(void)
HB_FUNC( MSQLLISTDB ) /* m_result * msqlListDBs(int); */ { int sock = hb_parnl( 1 ); m_result * mresult = msqlListDBs( sock ); long nr = msqlNumRows( mresult ); PHB_ITEM aDBs = hb_itemArrayNew( nr ); long i; for( i = 0; i < nr; i++ ) hb_arraySetC( aDBs, i + 1, msqlFetchRow( mresult )[ 0 ] ); msqlFreeResult( mresult ); hb_itemReturnRelease( aDBs ); } | msql.c | 158 |
HB_FUNC | MSQLLISTTA(void)
HB_FUNC( MSQLLISTTA ) /* m_result * msqlListTables(int); */ { int sock = hb_parnl( 1 ); m_result * mresult = msqlListTables( sock ); long nr = msqlNumRows( mresult ); PHB_ITEM aTables = hb_itemArrayNew( nr ); long i; for( i = 0; i < nr; i++ ) hb_arraySetC( aTables, i + 1, msqlFetchRow( mresult )[ 0 ] ); msqlFreeResult( mresult ); hb_itemReturnRelease( aTables ); } | msql.c | 173 |
tmsql.prg | |||
Type | Function | Source | Line |
CLASS | TmSQLRow
CLASS TmSQLRow DATA aRow // a single row of answer DATA aDirty // array of booleans set to .T. if corresponding field of aRow has been changed DATA aFieldStruct // type of each field DATA cTable // Name of table containing this row, empty if TmSQLQuery returned this row DATA nRowID // Record Number inside mSQL table. Used by Update() method of TmSQLTable METHOD New(aRow, aFStruct, cTableName, lRowID) // Create a new Row object and handle hidden _rowid field METHOD FieldGet(nNum) // Same as clipper ones METHOD FieldPut(nNum, Value) METHOD FieldName(nPosition) METHOD FieldPos(cFieldName) ENDCLASS | tmsql.prg | 61 |
TMSQLROW:METHOD | New(aRow, aFStruct, cTableName, lRowID) CLASS TmSQLRow
METHOD New(aRow, aFStruct, cTableName, lRowID) CLASS TmSQLRow default cTableName to "" default aFStruct to {} default lRowID to .F. ::cTable := cTableName ::aFieldStruct := aFStruct // if first field is _rowid I'm inside a TmSQLTable, so remove this low level // info from list of fields. if lRowID ::nRowID := aRow[1] // remove first field (copying from second) ::aRow := Array(Len(aRow) - 1) ACopy(aRow, ::aRow, 2) else ::aRow := aRow ::aFieldStruct := aFStruct ::nRowID := -1 endif ::aDirty := Array(Len(::aRow)) AFill(::aDirty, .F.) return Self | tmsql.prg | 80 |
TMSQLROW:METHOD | FieldGet(nNum) CLASS TmSQLRow
METHOD FieldGet(nNum) CLASS TmSQLRow if nNum > 0 .AND. nNum <= Len(::aRow) return ::aRow[nNum] endif return nil | tmsql.prg | 110 |
TMSQLROW:METHOD | FieldPut(nNum, Value) CLASS TmSQLRow
METHOD FieldPut(nNum, Value) CLASS TmSQLRow if nNum > 0 .AND. nNum <= Len(::aRow) if Valtype(Value) == Valtype(::aRow[nNum]) .OR. Empty(::aRow[nNum]) // if it's a char field encode singole quotes if ValType(Value) == "C" ::aRow[nNum] := StrTran(Value, "'", "\'") else ::aRow[nNum] := Value endif ::aDirty[nNum] := .T. return Value endif endif return nil | tmsql.prg | 119 |
TMSQLROW:METHOD | FieldPos(cFieldName) CLASS TmSQLRow
METHOD FieldPos(cFieldName) CLASS TmSQLRow local cUpperName, nPos := 1 cUpperName := Upper(cFieldName) /* NOTE: this code block kills harbour if called a few thousand times nPos := AScan(::aFieldStruct, {|aItem| iif(Upper(aItem[MSQL_FS_NAME]) == cUpperName, .T., .F.)}) */ while nPos <= Len(::aFieldStruct) if Upper(::aFieldStruct[nPos][MSQL_FS_NAME]) == cUpperName exit endif nPos++ enddo return nPos | tmsql.prg | 138 |
TMSQLROW:METHOD | FieldName(nPosition) CLASS TmSQLRow
METHOD FieldName(nPosition) CLASS TmSQLRow if nPosition >=1 .AND. nPosition <= Len(::aFieldStruct) return ::aFieldStruct[nPosition][MSQL_FS_NAME] endif return "" | tmsql.prg | 159 |
CLASS | TmSQLQuery
CLASS TmSQLQuery DATA nSocket // connection handle to mSQL server DATA nResultHandle // result handle received from mSQL DATA cQuery // copy of query that generated this object DATA nNumRows // number of rows available on answer NOTE msql is 0 based DATA nCurRow // I'm currently over row number DATA nNumFields // how many fields per row (including hidden _rowID) DATA aFieldStruct // type of each field, a copy is here a copy inside each row DATA lRowID // .T. if query has field _rowID DATA lError // .T. if last operation failed METHOD New(nSocket, cQuery) // New query object METHOD Destroy() METHOD GetRow(nRow) // return Row n of answer METHOD Skip(nRows) // Same as clipper ones | tmsql.prg | 170 |
TMSQLQUERY:METHOD | Bof()
METHOD Bof() INLINE ::nCurRow == 1 | tmsql.prg | 193 |
TMSQLQUERY:METHOD | Eof()
METHOD Eof() INLINE ::nCurRow > ::nNumRows | tmsql.prg | 194 |
TMSQLQUERY:METHOD | RecNo()
METHOD RecNo() INLINE ::nCurRow | tmsql.prg | 195 |
TMSQLQUERY:METHOD | LastRec()
METHOD LastRec() INLINE ::nNumRows METHOD FCount() | tmsql.prg | 196 |
TMSQLQUERY:METHOD | NetErr()
METHOD NetErr() INLINE ::lError // Returns .T. if something went wrong METHOD Error() // Returns textual description of last error and clears ::lError ENDCLASS | tmsql.prg | 200 |
TMSQLQUERY:METHOD | New(nSocket, cQuery) CLASS TmSQLQuery
METHOD New(nSocket, cQuery) CLASS TmSQLQuery local nI, aField ::aFieldStruct := {} ::nSocket := nSocket ::cQuery := cQuery ::nNumRows := msqlQuery(nSocket, cQuery) ::nCurRow := 1 ::lRowID := .F. ::lError := .F. if ::nNumRows >= 0 ::nResultHandle := msqlStoreR() ::nNumFields := msqlNumFie(::nResultHandle) for nI := 1 to ::nNumFields aField := msqlFetchF(::nResultHandle) if Upper(aField[MSQL_FS_NAME]) == "_ROWID" ::lRowID := .T. else AAdd(::aFieldStruct, aField) endif next else ::nResultHandle := nil ::nNumFields := 0 ::lError := .T. endif return Self | tmsql.prg | 206 |
TMSQLQUERY:METHOD | Skip(nRows) CLASS TmSQLQuery
METHOD Skip(nRows) CLASS TmSQLQuery // NOTE: mSQL row count starts from 0 default nRows to 1 if nRows == 0 // No move elseif nRows < 0 // Negative movement ::nCurRow := Max(::nCurRow - nRows, 1) else // positive movement ::nCurRow := Min(::nCurRow + nRows, ::nNumRows + 1) endif msqlDataSe(::nResultHandle, ::nCurRow - 1) return Self | tmsql.prg | 244 |
STATIC FUNCTION | NMonth(cMonthValue)
static function NMonth(cMonthValue) static cMonths := {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dec" } local nMonth := AScan(cMonths, cMonthValue) return PadL(nMonth, 2, "0") | tmsql.prg | 265 |
TMSQLQUERY:METHOD | GetRow(nRow) CLASS TmSQLQuery
METHOD GetRow(nRow) CLASS TmSQLQuery local aRow := NIL local oRow := NIL local i default nRow to 0 if ::nResultHandle != NIL if nRow >= 1 .AND. nRow <= ::nNumRows // NOTE: row count starts from 0 msqlDataSe(::nResultHandle, nRow - 1) ::nCurRow := nRow else ::nCurRow++ endif aRow := msqlFetchR(::nResultHandle, ::nNumFields) if aRow != NIL if ::lRowID aRow[1] := Val(aRow[1]) endif // Convert answer from text field to correct clipper types for i := iif(::lRowID, 2, 1) to ::nNumFields do case case ::aFieldStruct[iif(::lRowID, i - 1, i)][MSQL_FS_TYPE] == MSQL_UINT_TYPE aRow[i] := iif(Val(aRow[i]) == 0, .F., .T.) case ::aFieldStruct[iif(::lRowID, i - 1, i)][MSQL_FS_TYPE] == MSQL_INT_TYPE aRow[i] := Val(aRow[i]) case ::aFieldStruct[iif(::lRowID, i - 1, i)][MSQL_FS_TYPE] == MSQL_REAL_TYPE aRow[i] := Val(aRow[i]) case ::aFieldStruct[iif(::lRowID, i - 1, i)][MSQL_FS_TYPE] == MSQL_DATE_TYPE if Empty(aRow[i]) aRow[i] := CToD("") else // Date format MM/DD/YYYY aRow[i] := CToD(NMonth(__StrToken(aRow[i], 2, "-")) + "/" + __StrToken(aRow[i], 1, "-") + "/" + __StrToken(aRow[i], 3, "-")) endif otherwise endcase next oRow := TmSQLRow():New(aRow, ::aFieldStruct,, ::lRowID) endif endif return iif(aRow == NIL, NIL, oRow) | tmsql.prg | 275 |
TMSQLQUERY:METHOD | Destroy() CLASS TmSQLQuery
METHOD Destroy() CLASS TmSQLQuery msqlFreeR(::nResultHandle) return Self | tmsql.prg | 332 |
TMSQLQUERY:METHOD | FCount() CLASS TmSQLQuery
METHOD FCount() CLASS TmSQLQuery return ::nNumFields - iif(::lRowID, 1, 0) | tmsql.prg | 339 |
TMSQLQUERY:METHOD | Error() CLASS TmSQLQuery
METHOD Error() CLASS TmSQLQuery ::lError := .F. return msqlGetErr() | tmsql.prg | 344 |
CLASS | TmSQLTable FROM TmSQLQuery
CLASS TmSQLTable FROM TmSQLQuery DATA cTable // name of table METHOD New(nSocket, cQuery, cTableName) METHOD GetRow(nRow) METHOD Update(oRow) // Gets an oRow and updates changed fields METHOD Delete(oRow) // Deletes passed row from table METHOD Append(oRow) // Inserts passed row into table METHOD GetBlankRow() // Returns an empty row with all available fields empty ENDCLASS | tmsql.prg | 355 |
TMSQLTABLE:METHOD | New(nSocket, cQuery, cTableName) CLASS TmSQLTable
METHOD New(nSocket, cQuery, cTableName) CLASS TmSQLTable local cTrimmedQuery, nRes, i, cFieldList := "SELECT _rowid, ", aField ::cTable := cTableName // Add _rowid to query, Update() method needs this field cTrimmedQuery := AllTrim(cQuery) // if it's a SELECT * I cannot add _rowid to query; I need to expand * to the full list of fields if __StrToken(cTrimmedQuery, 2, " ") == "*" nRes := msqlListFi(nSocket, cTableName) if !Empty( nRes ) for i := 1 to msqlNumFie(nRes) aField := msqlFetchF(nRes) // don't count indexes as real fields if aField[MSQL_FS_TYPE] <= MSQL_LAST_REAL_TYPE cFieldList += aField[MSQL_FS_NAME] + "," endif next // remove last comma cFieldList := Left(cFieldList, Len(cFieldList) - 1) // remove SELECT cTrimmedQuery := StrTran(cTrimmedQuery, __StrToken(cTrimmedQuery, 1, " "), "") // remove * cTrimmedQuery := StrTran(cTrimmedQuery, __StrToken(cTrimmedQuery, 1, " "), "") cTrimmedQuery := cFieldList + cTrimmedQuery msqlFreeR(nRes) endif else cTrimmedQuery := StrTran(cTrimmedQuery, __StrToken(cTrimmedQuery, 1, " "), "SELECT _rowid, ") endif super:New(nSocket, cTrimmedQuery) return Self | tmsql.prg | 370 |
TMSQLTABLE:METHOD | GetRow(nRow) CLASS TmSQLTable
METHOD GetRow(nRow) CLASS TmSQLTable local oRow := super:GetRow(nRow) if oRow != NIL oRow:cTable := ::cTable endif return oRow | tmsql.prg | 411 |
TMSQLTABLE:METHOD | Update(oRow) CLASS TmSQLTable
METHOD Update(oRow) CLASS TmSQLTable local cUpdateQuery := "UPDATE " + ::cTable + " SET " local i, cField // is this a row of this table ? if oRow:cTable == ::cTable for i := 1 to Len(oRow:aRow) if oRow:aDirty[i] do case case Valtype(oRow:aRow[i]) == "N" cField := AllTrim(Str(oRow:aRow[i])) cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "=" + cField + "," case Valtype(oRow:aRow[i]) == "D" if !Empty(oRow:aRow[i]) // mSQL dates are like this 1-Oct-1900 cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "=" + "'" + Str(Day(oRow:aRow[i]), 2) + "-" + Left(CMonth(oRow:aRow[i]), 3) + "-" + Str(Year(oRow:aRow[i]), 4) + "'," else cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "=" + "''," endif case Valtype(oRow:aRow[i]) == "C" cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "='" + oRow:aRow[i] + "'," case Valtype(oRow:aRow[i]) == "L" cField := AllTrim(Str(iif(oRow:aRow[i] == .F., 0, 1))) cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "=" + cField + "," otherwise cUpdateQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "=''," endcase endif next // remove last comma cUpdateQuery := Left(cUpdateQuery, Len(cUpdateQuery) -1) cUpdateQuery += " WHERE _rowid=" + AllTrim(Str(oRow:nRowID)) if msqlQuery(::nSocket, cUpdateQuery) == 1 // All values are commited Afill(oRow:aDirty, .F.) return .T. else ::lError := .T. endif endif return .F. | tmsql.prg | 423 |
TMSQLTABLE:METHOD | Delete(oRow) CLASS TmSQLTable
METHOD Delete(oRow) CLASS TmSQLTable local cDeleteQuery := "DELETE FROM " + ::cTable + " WHERE _rowid=" // is this a row of this table ? if oRow:cTable == ::cTable cDeleteQuery += AllTrim(Str(oRow:nRowID)) if msqlQuery(::nSocket, cDeleteQuery) == 1 return .T. else ::lError := .T. endif endif return .F. | tmsql.prg | 476 |
TMSQLTABLE:METHOD | Append(oRow) CLASS TmSQLTable
METHOD Append(oRow) CLASS TmSQLTable local cInsertQuery := "INSERT INTO " + ::cTable + " (" local i, cField // is this a row of this table ? if oRow:cTable == ::cTable // field names for i := 1 to Len(oRow:aRow) cInsertQuery += oRow:aFieldStruct[i][MSQL_FS_NAME] + "," next // remove last comma from list cInsertQuery := Left(cInsertQuery, Len(cInsertQuery) -1) + ") VALUES (" // field values for i := 1 to Len(oRow:aRow) do case case Valtype(oRow:aRow[i]) == "N" cField := AllTrim(Str(oRow:aRow[i])) cInsertQuery += cField + "," case Valtype(oRow:aRow[i]) == "C" cInsertQuery += "'" + oRow:aRow[i] + "'," case Valtype(oRow:aRow[i]) == "D" if !Empty(oRow:aRow[i]) // mSQL dates have this form " 1-Oct-1990" /* NOTE: current implementation CANNOT retrieve from mSQL dates BEFORE 1st January 1970 */ cInsertQuery += "'" + Str(Day(oRow:aRow[i]), 2) + "-" + Left(CMonth(oRow:aRow[i]), 3) + "-" + Str(Year(oRow:aRow[i]), 4) + "'," else cInsertQuery += "''," endif case Valtype(oRow:aRow[i]) == "L" cField := AllTrim(Str(iif(oRow:aRow[i] == .F., 0, 1))) cInsertQuery += cField + "," otherwise cInsertQuery += "''," endcase next // remove last comma from list of values and add closing parenthesis cInsertQuery := Left(cInsertQuery, Len(cInsertQuery) -1) + ")" if msqlQuery(::nSocket, cInsertQuery) == 1 return .T. else ::lError := .T. endif endif return .F. | tmsql.prg | 496 |
TMSQLTABLE:METHOD | GetBlankRow() CLASS TmSQLTable
METHOD GetBlankRow() CLASS TmSQLTable local i local aRow := {} // crate an array of empty fields for i := 1 to ::FCount() do case case ::aFieldStruct[i][MSQL_FS_TYPE] == MSQL_CHAR_TYPE AAdd(aRow, "") case ::aFieldStruct[i][MSQL_FS_TYPE] == MSQL_INT_TYPE AAdd(aRow, 0) case ::aFieldStruct[i][MSQL_FS_TYPE] == MSQL_UINT_TYPE AAdd(aRow, .F.) case ::aFieldStruct[i][MSQL_FS_TYPE] == MSQL_REAL_TYPE AAdd(aRow, 0.0) case ::aFieldStruct[i][MSQL_FS_TYPE] == MSQL_DATE_TYPE AAdd(aRow, CToD("")) otherwise AAdd(aRow, nil) endcase next return TmSQLRow():New(aRow, ::aFieldStruct, ::cTable, .F.) | tmsql.prg | 555 |
CLASS | TmSQLServer
CLASS TmSQLServer DATA nSocket // connection handle to server DATA cServer // server name DATA cDBName // Selected DB DATA lError // .T. if occurred an error METHOD New(cServer) // Open connection to a server, returns a server object METHOD Destroy() // Closes connection to server METHOD SelectDB(cDBName) // Which data base I will use for subsequent queries METHOD CreateTable(cTable, aStruct) // Create new table using the same syntax of dbCreate() METHOD DeleteTable(cTable) // delete table METHOD TableStruct(cTable) // returns a structure array compatible with clipper's dbStruct() ones METHOD CreateIndex(cName, cTable, aFNames, lUnique) // Create an index (unique) on field name(s) passed as an array of strings aFNames METHOD DeleteIndex(cName, cTable) // Delete index cName from cTable METHOD ListDBs() // returns an array with list of data bases available METHOD ListTables() // returns an array with list of available tables in current database METHOD Query(cQuery) // Gets a textual query and returns a TmSQLQuery or TmSQLTable object | tmsql.prg | 590 |
TMSQLSERVER:METHOD | NetErr()
METHOD NetErr() INLINE ::lError // Returns .T. if something went wrong METHOD Error() // Returns textual description of last error ENDCLASS | tmsql.prg | 613 |
TMSQLSERVER:METHOD | New(cServer) CLASS TmSQLServer
METHOD New(cServer) CLASS TmSQLServer ::cServer := cServer ::cDBName := "" ::nSocket := msqlConnec(cServer) ::lError := .F. if ::nSocket == -1 ::lError := .T. endif return Self | tmsql.prg | 619 |
TMSQLSERVER:METHOD | SelectDB(cDBName) CLASS TmSQLServer
METHOD SelectDB(cDBName) CLASS TmSQLServer if msqlSelect(::nSocket, cDBName) >= 0 ::cDBName := cDBName return .T. else ::cDBName := "" endif return .F. | tmsql.prg | 633 |
TMSQLSERVER:METHOD | CreateTable(cTable, aStruct) CLASS TmSQLServer
METHOD CreateTable(cTable, aStruct) CLASS TmSQLServer local cCreateQuery := "CREATE TABLE " + cTable + " (" local i for i := 1 to Len(aStruct) do case case aStruct[i][DBS_TYPE] == "C" cCreateQuery += aStruct[i][DBS_NAME] + " char(" + AllTrim(Str(aStruct[i][DBS_LEN])) + ")," case aStruct[i][DBS_TYPE] == "N" if aStruct[i][DBS_DEC] == 0 cCreateQuery += aStruct[i][DBS_NAME] + " int," else cCreateQuery += aStruct[i][DBS_NAME] + " real," endif case aStruct[i][DBS_TYPE] == "D" cCreateQuery += aStruct[i][DBS_NAME] + " date," case aStruct[i][DBS_TYPE] == "L" cCreateQuery += aStruct[i][DBS_NAME] + " uint," otherwise cCreateQuery += aStruct[i][DBS_NAME] + " char(" + AllTrim(Str(aStruct[i][DBS_LEN])) + ")," endcase next // remove last comma from list cCreateQuery := Left(cCreateQuery, Len(cCreateQuery) -1) + ")" if msqlQuery(::nSocket, cCreateQuery) == 1 return .T. else ::lError := .T. endif return .F. | tmsql.prg | 645 |
TMSQLSERVER:METHOD | CreateIndex(cName, cTable, aFNames, lUnique) CLASS TmSQLServer
METHOD CreateIndex(cName, cTable, aFNames, lUnique) CLASS TmSQLServer local cCreateQuery := "CREATE " local i default lUnique to .F. if lUnique cCreateQuery += "UNIQUE INDEX " else cCreateQuery += "INDEX " endif cCreateQuery += cName + " ON " + cTable + " (" for i := 1 to Len(aFNames) cCreateQuery += aFNames[i] + "," next // remove last comma from list cCreateQuery := Left(cCreateQuery, Len(cCreateQuery) -1) + ")" if msqlQuery(::nSocket, cCreateQuery) == 1 return .T. endif return .F. | tmsql.prg | 687 |
TMSQLSERVER:METHOD | DeleteIndex(cName, cTable) CLASS TmSQLServer
METHOD DeleteIndex(cName, cTable) CLASS TmSQLServer local cDropQuery := "DROP INDEX " + cName + " FROM " + cTable if msqlQuery(::nSocket, cDropQuery) == 1 return .T. endif return .F. | tmsql.prg | 716 |
TMSQLSERVER:METHOD | DeleteTable(cTable) CLASS TmSQLServer
METHOD DeleteTable(cTable) CLASS TmSQLServer local cDropQuery := "DROP TABLE " + cTable if msqlQuery(::nSocket, cDropQuery) == 1 return .T. endif return .F. | tmsql.prg | 727 |
TMSQLSERVER:METHOD | Query(cQuery) CLASS TmSQLServer
METHOD Query(cQuery) CLASS TmSQLServer local oQuery, cTableName, i, cUpperQuery, nNumTables, cToken cUpperQuery := Upper(AllTrim(cQuery)) i := 1 nNumTables := 0 while !( __StrToken(cUpperQuery, i++, " ") == "FROM" ) enddo while !( (cToken := __StrToken(cUpperQuery, i++, " ")) == "WHERE" ) .AND. !( cToken == "LIMIT" ) .AND. !Empty(cToken) cTableName := __StrToken(cQuery, i - 1, " ") nNumTables++ enddo if nNumTables == 1 oQuery := TmSQLTable():New(::nSocket, cQuery, cTableName) else oQuery := TmSQLQuery():New(::nSocket, cQuery) endif if oQuery:nNumRows < 0 ::lError := .T. endif return oQuery | tmsql.prg | 738 |
TMSQLSERVER:METHOD | Destroy() CLASS TmSQLServer
METHOD Destroy() CLASS TmSQLServer msqlClose(::nSocket) return Self | tmsql.prg | 767 |
TMSQLSERVER:METHOD | Error() CLASS TmSQLServer
METHOD Error() CLASS TmSQLServer ::lError := .F. return msqlGetErr() | tmsql.prg | 774 |
TMSQLSERVER:METHOD | ListDBs() CLASS TmSQLServer
METHOD ListDBs() CLASS TmSQLServer local aList aList := msqlListDB(::nSocket) return aList | tmsql.prg | 781 |
TMSQLSERVER:METHOD | ListTables() CLASS TmSQLServer
METHOD ListTables() CLASS TmSQLServer local aList aList := msqlListTa(::nSocket) return aList | tmsql.prg | 790 |
TMSQLSERVER:METHOD | TableStruct(cTable) CLASS TmSQLServer
METHOD TableStruct(cTable) CLASS TmSQLServer local nRes, aField, aStruct, aSField, i aStruct := {} nRes := msqlListFi(::nSocket, cTable) if !Empty( nRes ) for i := 1 to msqlNumFie(nRes) aField := msqlFetchF(nRes) aSField := Array(DBS_DEC) // don't count indexes as real fields if aField[MSQL_FS_TYPE] <= MSQL_LAST_REAL_TYPE aSField[DBS_NAME] := Left(aField[MSQL_FS_NAME], 10) aSField[DBS_DEC] := 0 do case case aField[MSQL_FS_TYPE] == MSQL_INT_TYPE aSField[DBS_TYPE] := "N" aSField[DBS_LEN] := 11 case aField[MSQL_FS_TYPE] == MSQL_UINT_TYPE aSField[DBS_TYPE] := "L" aSField[DBS_LEN] := 1 case aField[MSQL_FS_TYPE] == MSQL_CHAR_TYPE aSField[DBS_TYPE] := "C" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] case aField[MSQL_FS_TYPE] == MSQL_DATE_TYPE aSField[DBS_TYPE] := "D" aSField[DBS_LEN] := aField[MSQL_FS_LENGTH] case aField[MSQL_FS_TYPE] == MSQL_REAL_TYPE aSField[DBS_TYPE] := "N" aSField[DBS_LEN] := 12 aSFIeld[DBS_DEC] := 8 otherwise endcase AAdd(aStruct, aSField) endif next msqlFreeR(nRes) endif return aStruct | tmsql.prg | 800 |
Page url: http://www.yourdomain.com/help/index.html?hbmsql.htm