Jump to content
Fivewin Brasil

williamAdami

Membros
  • Posts

    5
  • Joined

  • Last visited

  • Days Won

    1

williamAdami last won the day on October 9 2013

williamAdami had the most liked content!

williamAdami's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. http://www.4shared.com/zip/1TvWPvrw/TEST_UTI.html Olá, neste link tem a utilprn.prg que eu modifiquei para trabalhar com a FREEIMAGE ao invés da NVIEWLIB.DLL que a classe do rafa utiliza. Pelo que eu saiba, roda em todas as versões do FWH. Teste e avise se roda OK William Adami
  2. Olá Tiago, o seguinte código funciona bem , está criando a tabela normalmente, teste aí: function criatabela() local osql ,csql oSql := SR_GetConnection() cSql :="CREATE TABLE CARTA (sr_recno bigint(15) NOT NULL unique auto_increment, CODE char(3), NAME char(50), sr_deleted char(1) default ' ' NOT NULL );" oSql:Exec( csql ) return nil
  3. boa noite, no exemplo a seguir tem uma rotina que cria a tabela com sqlrdd , talvez te ajude. William *********************************************************** ** Arquivo....: TConnectionManager ** ** Função.....: ** ** Autor......: Valter Junior ** ** Data/Hora..: 03/02/2011 00:04:13 ** ** Observações: ** ** ** *********************************************************** # include "FiveWin.ch" # include "sqlrdd.ch" # include "HBXml.ch" #IFDEF _POSTGREESQL_ # include "pgs.ch" #ENDIF #IFDEF _MYSQL_ # include "mysql.ch" #ENDIF #IFDEF _ORACLE_ # include "oracle.ch" #ENDIF #IFDEF _FIREBIRD_ # include "firebird.ch" #ENDIF REQUEST SQLRDD REQUEST SQLEX REQUEST SR_ODBC #IFDEF _POSTGREESQL_ REQUEST SR_PGS #ENDIF #IFDEF _MYSQL_ REQUEST SR_MYSQL #ENDIF #IFDEF _ORACLE_ REQUEST SR_ORACLE #ENDIF #IFDEF _FIREBIRD_ REQUEST SR_FIREBIRD #ENDIF # define RDD_NAME "SQLRDD" CLASS TConnectionManager PRIVATE: DATA nActiveHandle DATA aActiveConnections DATA cFile DATA nIdDataBase DATA aFieldsIncrements DATA cDatabase DATA cSQL PUBLIC: METHOD new( cFile ) CONSTRUCTOR METHOD createConnection( cName, nIdDataBase, cHost, cDatabase, cUser, cPassword, cTns ) METHOD saveConnection( cName, nId, cString ) METHOD openConnection( cName ) METHOD connectionExists( cName ) METHOD end() METHOD getHandle() INLINE ::nActiveHandle METHOD getConnection() INLINE SR_GetConnection( ::nActiveHandle ) METHOD beginTransaction() INLINE SR_BeginTransaction( ::nActiveHandle ) METHOD endTransaction() INLINE SR_EndTransaction( ::nActiveHandle ) METHOD roolBack() INLINE SR_RollBackTransaction( ::nActiveHandle ) METHOD tableExists( cTable ) INLINE SR_ExistTable( cTable ) METHOD createTable( cTable, aStruct ) METHOD convertSql( cSql, aParams ) METHOD getSystemId() INLINE ::nIdDatabase METHOD getPath() INLINE ::cFile METHOD FormatSql( aField ) METHOD createSequence() METHOD getSQLParse() INLINE ::cSQL METHOD quotedStr( xValue ) INLINE SR_SQLQuotedString( xValue, ::nIdDatabase ) METHOD toTable( cSql, aParams, cAlias ) METHOD toArray( cSql, aParams ) METHOD getOdbcId() INLINE CONNECT_ODBC METHOD getPostgreId() INLINE CONNECT_POSTGRES METHOD getMysqlId() INLINE CONNECT_MYSQL METHOD getOracleId() INLINE CONNECT_ORACLE METHOD getFireBirdId() INLINE CONNECT_FIREBIRD ENDCLASS /* * Construtor * 07/02/2011 - 21:26:20 */ METHOD new( cFile ) CLASS TConnectionManager IF empty( cFile ) msgStop( "Arquivo xml não foi informado", "Erro" ) RETURN ENDIF ::aActiveConnections := {} ::aFieldsIncrements := {} ::cFile := cFile RETURN Self /* * Criar uma nova conexão ou abrir caso já existe, e gravar no arquivo xml * 07/02/2011 - 21:29:46 */ METHOD createConnection( cName, nIdDatabase, cHost, cDatabase, cUser, cPassword, cTns ) CLASS TConnectionManager LOCAL cString DEFAULT cTns := "" switch( nIdDatabase ) CASE CONNECT_ODBC cString := "" EXIT CASE CONNECT_POSTGRES cString := "ConnString = pgs=" + cHost + ";uid=" + cUser + ";dtb="+ cDatabase + ";pwd=" + cPassword EXIT CASE CONNECT_MYSQL cString := "ConnString = MySQL=" + cHost + ";UID=" + cUser + ";PWD=" + cPassword + ";DTB=" + cDatabase EXIT CASE CONNECT_ORACLE cString := "ConnString = OCI=" + cHost + ";UID=" + cUser + ";PWD=" + cPassword + ";TNS=" + cTns + ";" EXIT CASE CONNECT_FIREBIRD DEFAULT cTns := "ISO8859_1" cString := "ConnString = FIREBIRD=" + cHost + ":e:" + cDatabase + ";uid=" + cUser + ";pwd=" + cPassword + ";charset=" + cTns EXIT END ::nActiveHandle := SR_AddConnection( nIdDatabase, cString ) IF ::nActiveHandle < 0 msgStop( "Erro ao conectar com o banco de dados " + cDatabase + "!", "Erro" ) RETURN -1 ENDIF aAdd( ::aActiveConnections, ::nActiveHandle ) IF ! ::connectionExists( cName ) ::saveConnection( cName, nIdDatabase, cString ) ENDIF ::nIdDatabase := nIdDatabase ::cDataBase := cDatabase RETURN ::nActiveHandle /* * Salvar uma conexão no arquivo xml identificando com um alias * 07/02/2011 - 21:29:46 */ METHOD saveConnection( cName, nId, cString ) CLASS TConnectionManager LOCAL nFileHandle,; oXml ,; oFile oFile := TTxtFile():new( ::cFile ) IF FError() > 0 msgStop( "Erro ao criar arquivo " + ::cFile ) RETURN .F. ENDIF oXml := TXmlNode():new( nil, cName, nil, "" ) oXml:setAttribute( "IDConnection" , alltrim( str( nId ) ) ) oXml:setAttribute( "StringConnection", alltrim( cString ) ) oXml:write( oFile:hFile, HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES ) oFile:end() RETURN /* * Abre uma conexão salva apartir de um alias * 07/02/2011 - 21:29:46 */ METHOD openConnection( cName ) CLASS TConnectionManager LOCAL oXml LOCAL nFileHandle LOCAL oNode nFileHandle := FOpen( ::cFile ) IF FError() > 0 msgStop( "Não foi possível abrir o arquivo " + ::cFile, "Erro" ) RETURN ENDIF oXml := TXmlDocument():new( nFileHandle ) IF oXml:nStatus <> HBXML_STATUS_OK msgStop( "Arquivo " + ::cFile + " não é um xml válido", "Erro" ) oXml:end() RETURN -1 ENDIF oNode := oXml:findFirst( cName ) IF oNode <> nil ::nActiveHandle := SR_AddConnection( val( oNode:getAttribute( "IDConnection" ) ), oNode:getAttribute( "StringConnection" ) ) ::nIdDatabase := val( oNode:getAttribute( "IDConnection" ) ) IF ::nActiveHandle < 0 msgStop( "Erro ao conectar com o banco de dados!", "Erro" ) RETURN -1 ENDIF aAdd( ::aActiveConnections, ::nActiveHandle ) ELSE msgStop( "Conexão não encontrada", "Erro" ) RETURN -1 ENDIF FClose( nFileHandle ) RETURN ::nActiveHandle /* * Checa se uma conexão já foi salva anteriormente através de uma alias * 07/02/2011 - 21:29:46 */ METHOD connectionExists( cName ) CLASS TConnectionManager LOCAL nFileHandle,; oXml,; oNode,; lResult nFileHandle := FOpen( ::cFile ) IF FError() > 0 RETURN .F. ENDIF oXml := TXmlDocument():new( nFileHandle ) IF oXml:nStatus <> HBXML_STATUS_OK oXml:end() RETURN .F. ENDIF oNode := oXml:findFirst( cName ) lResult := oNode <> nil RETURN lResult /* * Criar tabela no banco * 21/02/2011 - 21:45:47 */ METHOD createTable( cTable, aStruct ) CLASS TConnectionManager LOCAL nCont, cSql cSql := "CREATE TABLE " + cTable + "( " FOR nCont := 1 TO Len( aStruct ) cSql += ::FormatSql( aStruct[nCont] ) + ", " NEXT If ::getSystemId() == CONNECT_MYSQL cSql += "sr_recno bigint(15) NOT NULL unique auto_increment, " ElseIf ::getSystemId() == CONNECT_ORACLE cSql += "sr_recno number(15) NOT NULL, " aAdd( ::aFieldsIncrements, { cTable, "sr_recno" } ) Endif cSql += "sr_deleted char(1) default ' ' NOT NULL ) " ::getConnection():execute( cSql ) If ::getSystemId() == CONNECT_ORACLE ::createSequence() Endif RETURN /* * Retorna string com instrução SQL para a criação dos campos * 21/02/2011 - 21:45:47 */ METHOD FormatSql( aField ) CLASS TConnectionManager LOCAL cSql := "", cField := "", lAutoIncrement cField1 := Alltrim( Str( aField[ 3 ] ) ) cField2 := Alltrim( Str( aField[ 4 ] ) ) lAutoIncrement := if( aField[12] == nil, .F., aField[12] ) If ::getSystemID() == CONNECT_MYSQL IF aField[ 2 ] == "C" IF val(cField1) > 255 cSql := "blob" ELSE cSql := "char(" + cField1 + ") default ' ' NULL " ENDIF ELSEIF aField[ 2 ] == "N" IF lAutoIncrement IF ::getSystemId() == CONNECT_MYSQL cSql := "int(" + cField1 + ") NOT NULL auto_increment, " ELSEIF ::getSystemId() == CONNECT_ORACLE cSql += "number(" + cField1 + ") NOT NULL, " aAdd( ::aFieldsIncrements, { cTable, aField[1] } ) ENDIF ELSE cSql := "decimal(" + cField1 + "," + cField2 + ") default '0' NULL " ENDIF ELSEIF aField[ 2 ] == "D" cSql := "date default '0001-01-01' NULL" ELSEIF aField[ 2 ] == "L" cSql := "tinyint(" + cField1 + ") default '0' NULL" ELSEIF aField[ 2 ] == "M" cSql := "blob" ENDIF ElseIf ::getSystemID() = CONNECT_ORACLE IF aField[ 2 ] == "C" IF val(cField1) > 255 cSql := "clob default ' ' NULL" ELSE cSql := "char(" + cField1 + ") default ' ' NULL" ENDIF ELSEIF aField[ 2 ] == "N" cSql := "number(" + cField1 + "," + cField2 + ") default '0' NULL" ELSEIF aField[ 2 ] == "D" cSql := "date" ELSEIF aField[ 2 ] == "L" cSql := "integer default '0' NULL" ELSEIF aField[ 2 ] == "M" cSql := "clob default ' ' NULL" ENDIF Endif RETURN if( !empty( cSql ), Lower( aField[ 1 ] ) + " " + cSql, "" ) METHOD createSequence() CLASS TConnectionManager LOCAL nCont,; cSql ,; cTable,; cField FOR nCont := 1 TO len( ::aFieldsIncrements ) cTable := ::aFieldsIncrements[nCont,1] cField := ::aFieldsIncrements[nCont,2] cSql := "CREATE OR REPLACE SEQUENCE " + ::cDatabase + "." + cTable + "_SQ" cSql += " START WITH 1" cSql += " MAXVALUE 999999999999999999999999999" cSql += " MINVALUE 1" cSql += " NOCYCLE" cSql += " CACHE 20" cSql += " NOORDER" ::getConnection():execute( cSql ) cSql := "CREATE OR REPLACE FUNCTION " + ::cDatabase + "." + cTable + "_SP RETURN" cSql += " NUMBER AS ID_R NUMBER;" cSql += " BEGIN SELECT " + cTable + "_SQ.NEXTVAL INTO ID_R FROM DUAL;" cSql += " RETURN ID_R; END;" ::getConnection():execute( cSql ) cSql := "CREATE OR REPLACE TRIGGER " + ::cDatabase + "." + cTable + "_SR BEFORE" cSql += " INSERT ON " + SR_SQLQuotedString( Upper(cTable), ::getSystemId() ) + " FOR EACH ROW" cSql += " DECLARE v_seq " + SR_SQLQuotedString( Upper(cTable), ::getSystemId() ) + "." + cField + "%TYPE;" cSql += " BEGIN If :OLD." + cField + " IS NULL THEN" cSql += " SELECT " + cTable + "_SQ.NEXTVAL INTO v_seq FROM DUAL;" cSql += " :NEW." + cField + " := v_seq; END IF; END;" ::getConnection():execute( cSql ) NEXT RETURN METHOD convertSql( cSql, aParams ) CLASS TConnectionManager ::cSql := SR_SQLCodeGen( SR_SQLParse( cSql ), aParams ) RETURN ::cSql METHOD end() CLASS TConnectionManager SR_EndConnection( ::nActiveHandle ) RETURN METHOD toTable( cSql, aParams, cAlias ) CLASS TConnectionManager ::getConnection():exec( ::convertSql( cSql, aParams ),, .T.,, cAlias ) RETURN METHOD toArray( cSql, aParams, lAssociativo ) CLASS TConnectionManager LOCAL nCont, nCont2, aHash, aResult := {}, aAux := {} DEFAULT lAssociativo := .F. IF cSql == NIL .OR. Empty( cSql ) *// Throw( ErrorNew( "CONEXAO", 0, ++::nContException, ProcName(), "Instrução SQL requerida." ) ) MsgAlert("Instrução SQL requerida, observe a chamada na " + ProcName(),"Verifique" ) Return aRetorno ENDIF IF lAssociativo ::getConnection():exec( ::convertSql( cSql, aParams ),, .T., @aAux ) // criando hash! FOR nCont := 1 To LEN( aAux ) aHash := hash() FOR nCont2 := 1 TO len( ::getConnection:aFields ) aHash[ Lower( ::getConnection:aFields[ nCont2, 1] ) ] := aAux[nCont, nCont2] NEXT aAdd( aResult, aHash ) NEXT ELSE ::getConnection():exec( ::convertSql( cSql, aParams ),, .T., @aResult ) ENDIF RETURN aResult
  4. só mais uma coisa, se quiser que também apareçam as impressoras, retire esta parte do código: .AND.substr(CARTIM->texto,14,4)#'Impr' desta forma vão sair o nome das máquinas e também as impressoras da rede... Att. William Adami
  5. Function qualcamired Local oDlg101,oWnd,ncodigo,cestacao,nquantas,ocoment,odlg2 local volta:="",obrw,area:=select() nquantas :=0 ferase("carimp.dbf") DbCreate( "CARIMP", { { "QUANTAS" , "N", 04, 0 },; { "NOME_IMP" , "C", 14, 0 },; { "ESTACAO" , "C", 23, 0 },; { "COMENTARIO", "C", 30, 0 } } ) if OpenFile( "carimp","carimp", 1, .F. ) endif WAITRUN("COMMAND.COM /C net view > estacao.txt" ) DbCreate( "CARTES", { { "TEXTO", "C", 100, 0 } } ) if OpenFile( "cartes","cartes", 1, .F. ) endif APPEND FROM estacao.txt SDF dbselectarea("CARTES") dbgotop() Do while !eof() if substr(CARTES->texto,1,2)#'\\' dbskip(1) loop endif dbselectarea('CARIMP') cestacao :=substr(CARTES->texto,1,23) ferase("ESTACAO.TXT") WAITRUN("COMMAND.COM /C net view "+cestacao+" > estacao1.txt" ) DbCreate( "CARTIM", { { "TEXTO", "C", 100, 0 } } ) if OpenFile( "cartim","cartim", 2, .F. ) endif APPEND FROM estacao1.txt SDF dbselectarea("CARTIM") dbgotop() Do while !eof() if substr(CARTIM->texto,14,4)#'Disc'.AND.substr(CARTIM->texto,14,4)#'Impr' dbskip(1) loop else if substr(CARTIM->texto,14,4)<>'Disc' ocoment:="Impressora" else ocoment:="Disco" endif endif dbselectarea('CARIMP') append blank nquantas++ replace CARIMP->quantas with nquantas replace CARIMP->estacao with substr(CARTES->texto,1,23) replace CARIMP->nome_imp with '\'+substr(CARTIM->texto,1,13) replace CARIMP->comentario with ocoment dbselectarea('CARTIM') dbskip(1) Enddo dbselectarea('CARTIM') dbclosearea('CARTIM') ferase('CARTIM.DBF') dbselectarea('CARTES') dbskip(1) Enddo dbselectarea('CARTES') dbclosearea('CARTES') ferase('CARTES.DBF') ferase('ESTACAO.TXT') ferase('ESTACAO1.TXT') dbselectarea('CARIMP') go top DEFINE DIALOG oDlg2 RESOURCE "REDE" TITLE "COMPONENTES DA REDE" odlg2:lhelpicon:=.f. REDEFINE LISTBOX obrw FIELDS carimp->NOME_IMP, ; carimp->ESTACAO, ; carimp->COMENTARIO ; HEADERS OemToAnsi( "NOME" ), ; OemToAnsi( "ESTACAO" ), ; OemToAnsi( "DESCRICAO" ) ; COLOR CLR_BLACK, rgb(238,221,130) ; ID 101 ; OF oDlg2 ; ON DBLCLICK (volta:=rtrim(carimp->estacao)+rtrim(carimp->nome_imp),odlg2:end()) obrw:bKeyChar := {|nK| if( nK==VK_RETURN, (volta:=rtrim(carimp->estacao)+rtrim(carimp->nome_imp),odlg2:end()) ,NIL)} activate dialog odlg2 centered dbclosearea("carimp") select(area) Return volta Olá , acima está a rotina que eu uso para isso. Abraço William Adami
×
×
  • Create New...