Mais uma alternativa FREE com codigo aberto para usar SQL...

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por rochinha »

Amiguinhos

Sempre surgem alternativas para nós para podermos trabalhar com tipods de dados diferentes e talvez mais seguros que nossos velhos e cansados .DBFs.

Lógico que eu não abandonei estes velhos pois ainda são melhores de manusear e manter, mas meu aplicativos agora entende também de Access e MySQL, tudo junto e sem briga.

A ferramenta em questão é SQLite.

Não confunda com SQL Lite uma ferramenta de gerenciamento de arquivos Access, MSDE, etc.

Trata-se de uma biblioteca muito pequena, menos de 100k, que linkadas ao aplicativo permite trabalhar com uma base de dados SQL própria usando a sintate SQL padrão.

Convenhamos, que de uma forma ou outra precisamos aprender pelo menos o basico desta velha linguagem com CREATE, INSERT, ALTER, etc.

Um pequeno exemplo escrito em xBase puro para ser compilado com Harbour/xHarbour voce encontra em:

http://www.geocities.com/SiliconValley/ ... ite_en.htm

Voces poderão baixar a biblioteca e seu código fonte em:

http://www.sqlite.org/download.html

E a documentação em:

http://www.sqlite.org/docs.html

pode ser uma alternativa legal, talvez tão simples de implementar quanto as que já conhecemos, mas o melhor de tudo é que é FREE.

E mais informações sobre como usar em:

http://unsignedint.wordpress.com/2006/0 ... s-parte-2/

@braços :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
momente
Usuário Nível 3
Usuário Nível 3
Mensagens: 496
Registrado em: 03 Mar 2005 11:53
Localização: São Carlos-SP
Contato:

Mensagem por momente »

Muito legal esta sua dica Rochinha,

Vamos arregaçar as mangas pessoal!!! -:]
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
claudiochaves
Usuário Nível 1
Usuário Nível 1
Mensagens: 35
Registrado em: 28 Jul 2017 15:48
Localização: campinas/sp

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por claudiochaves »

Ola pessoal, boa tarde, desejo que estejam bem.

O link do exemplo em xbase esta quebrado. Alguém teria o código para compartilhar?
Claudio Chaves
Desenvolvedor
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por Itamar M. Lins Jr. »

Olá!
O link do exemplo em xbase esta quebrado. Alguém teria o código para compartilhar?
Na pasta contrib do Harbour. => \contrib\hbsqlit3\tests

Código: Selecionar todos

#require "hbsqlit3"

#define TRACE
#define TABLE_SQL "CREATE TABLE t1( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER )"

PROCEDURE Main()

   ? sqlite3_libversion()
   sqlite3_sleep( 3000 )

   IF sqlite3_libversion_number() < 3005001
      RETURN
   ENDIF

   t1()
   t2()

   RETURN

/*
*/
PROCEDURE t1()

   LOCAL lCreateIfNotExist := .F.
   LOCAL db := sqlite3_open( "new.s3db", lCreateIfNotExist )

   IF ! Empty( db )
      sqlite3_exec( db, "DROP TABLE t1" )
   ENDIF

   RETURN

/*
*/
PROCEDURE t2()

   LOCAL lCreateIfNotExist := .T.
   LOCAL db := sqlite3_open( "new.s3db", lCreateIfNotExist )
   LOCAL stmt
   LOCAL nCCount, nCType, nI, nJ
   LOCAL aCType :=  { "SQLITE_INTEGER", "SQLITE_FLOAT", "SQLITE_TEXT", "SQLITE_BLOB", "SQLITE_NULL" }
   LOCAL aTable

   IF ! Empty( db )

#ifdef TRACE
      sqlite3_profile( db, .T. )
      sqlite3_trace( db, .T. )
#endif
      sqlite3_exec( db, "PRAGMA auto_vacuum=0" )
      sqlite3_exec( db, "PRAGMA page_size=4096" )

      IF sqlite3_exec( db, TABLE_SQL ) == SQLITE_OK
         ? "CREATE TABLE t1 - Ok"
      ENDIF

      sqlite3_exec( db, ;
         "BEGIN TRANSACTION;" + ;
         "INSERT INTO t1( name, age ) VALUES( 'Bob', 52 );" + ;
         "INSERT INTO t1( name, age ) VALUES( 'Fred', 40 );" + ;
         "INSERT INTO t1( name, age ) VALUES( 'Sasha', 25 );" + ;
         "INSERT INTO t1( name, age ) VALUES( 'Ivet', 28 );" + ;
         "COMMIT;" )

      ? "BEGIN TRANSACTION"
      ? "INSERT INTO t1( name, age ) VALUES( 'Bob', 52 )"
      ? "INSERT INTO t1( name, age ) VALUES( 'Fred', 40 )"
      ? "INSERT INTO t1( name, age ) VALUES( 'Sasha', 25 )"
      ? "INSERT INTO t1( name, age ) VALUES( 'Ivet', 28 )"
      ? "COMMIT"

      ? "The number of database rows that were changed: " + hb_ntos( sqlite3_changes( db ) )
      ? "Total changes: " + hb_ntos( sqlite3_total_changes( db ) )

      sqlite3_sleep( 3000 )

      stmt := sqlite3_prepare( db, "INSERT INTO t1( name, age ) VALUES( :name, :age )" )
      IF ! Empty( stmt )
         IF sqlite3_bind_text( stmt, 1, "Andy" ) == SQLITE_OK .AND. ;
            sqlite3_bind_int( stmt, 2, 17 ) == SQLITE_OK
            IF sqlite3_step( stmt ) == SQLITE_DONE
               ? "INSERT INTO t1( name, age ) VALUES( 'Andy', 17 ) - Done"
            ENDIF
         ENDIF
         sqlite3_reset( stmt )

         IF sqlite3_bind_text( stmt, 1, "Mary" ) == SQLITE_OK .AND. ;
            sqlite3_bind_int( stmt, 2, 19 ) == SQLITE_OK
            IF sqlite3_step( stmt ) == SQLITE_DONE
               ? "INSERT INTO t1( name, age ) VALUES( 'Mary', 19 ) - Done"
            ENDIF
         ENDIF
         sqlite3_clear_bindings( stmt )
         sqlite3_finalize( stmt )
      ENDIF

      ? "The number of database rows that were changed: " + hb_ntos( sqlite3_changes( db ) )
      ? "Total changes: " + hb_ntos( sqlite3_total_changes( db ) )
      ? "Last _ROWID_: " + Str( sqlite3_last_insert_rowid( db ) )
      ? ""

      stmt := sqlite3_prepare( db, "SELECT * FROM t1 WHERE name == :name " )
      sqlite3_bind_text( stmt, 1, "Andy" )

      ?
      ? "SELECT * FROM t1 WHERE name == 'Andy'"
      nJ := 0

      DO WHILE sqlite3_step( stmt ) == SQLITE_ROW
         nCCount := sqlite3_column_count( stmt )
         ++nJ
         ? "Record # " + Str( nJ )

         IF nCCount > 0
            FOR nI := 0 TO nCCount - 1
               nCType := sqlite3_column_type( stmt, nI )
               ? "Column name : " + sqlite3_column_name( stmt, nI )
               ? "Column type : " + aCType[ nCType ]
               ? "Column value: "

               SWITCH nCType
               CASE SQLITE_BLOB
                  ?? "BLOB" // sqlite3_column_blob( stmt, nI )
                  EXIT

               CASE SQLITE_INTEGER
                  ?? Str( sqlite3_column_int( stmt, nI ) )
                  EXIT

               CASE SQLITE_NULL
                  ?? "NULL"
                  EXIT

               CASE SQLITE_TEXT
                  ?? sqlite3_column_text( stmt, nI )
                  EXIT
               ENDSWITCH

            NEXT
         ENDIF
      ENDDO
      ? "Total records - " + Str( nJ )

      sqlite3_clear_bindings( stmt )
      sqlite3_finalize( stmt )

      sqlite3_sleep( 3000 )

      stmt := sqlite3_prepare( db, "SELECT * FROM t1 WHERE age >= ?5" )
      sqlite3_bind_int( stmt, 5, 40 )

      ?
      ? "SELECT * FROM t1 WHERE age >= 40 "
      nJ := 0
      DO WHILE sqlite3_step( stmt ) == SQLITE_ROW
         nCCount := sqlite3_column_count( stmt )
         ++nJ
         ? "Record # " + Str( nJ )

         IF nCCount > 0
            FOR nI := 1 TO nCCount
               nCType := sqlite3_column_type( stmt, nI )
               ? "Column name : " + sqlite3_column_name( stmt, nI )
               ? "Column type : " + aCType[ nCType ]
               ? "Column value: "

               SWITCH nCType
               CASE SQLITE_BLOB
                  ?? "BLOB" // sqlite3_column_blob( stmt, nI )
                  EXIT

               CASE SQLITE_INTEGER
                  ?? Str( sqlite3_column_int( stmt, nI ) )
                  EXIT

               CASE SQLITE_NULL
                  ?? "NULL"
                  EXIT

               CASE SQLITE_TEXT
                  ?? sqlite3_column_text( stmt, nI )
                  EXIT
               ENDSWITCH

            NEXT
         ENDIF
      ENDDO
      ? "Total records - " + Str( nJ )
      sqlite3_clear_bindings( stmt )
      sqlite3_finalize( stmt )

      sqlite3_sleep( 3000 )

      ?
      ? "SELECT id, name, age + 5 FROM t1"
      stmt := sqlite3_prepare( db, "SELECT id, name, age + 5 FROM t1" )

      ? sqlite3_column_name( stmt, 1 )
      ? sqlite3_column_name( stmt, 2 )
      ? sqlite3_column_name( stmt, 3 )

      ? aCType[ sqlite3_column_type( stmt, 1 ) ]
      ? aCType[ sqlite3_column_type( stmt, 2 ) ]
      ? aCType[ sqlite3_column_type( stmt, 3 ) ]

      ? sqlite3_column_decltype( stmt, 1 )
      ? sqlite3_column_decltype( stmt, 2 )
      ? sqlite3_column_decltype( stmt, 3 )

      sqlite3_finalize( stmt )

      sqlite3_sleep( 3000 )

      ?
      ? "sqlite3_get_table"
      ?
      aTable := sqlite3_get_table( db, "SELECT name, age  FROM t1 WHERE age BETWEEN 10 AND 20" )
      FOR nI := 1 TO Len( aTable )
         FOR nJ := 1 TO Len( aTable[ nI ] )
            ?? aTable[ nI ][ nJ ], " "
         NEXT
         ?
      NEXT

      sqlite3_sleep( 3000 )
   ENDIF

   RETURN
Lá tem outros exemplos

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por rochinha »

Amiguinhos,

Através do WayBack Machine consegui ver algumas páginas e inclusive o download dos arquivos necessários para uma análise:

geocities.com/SiliconValley...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por JoséQuintas »

Rochinha

Se não entendeu, SQLITE faz parte do Harbour.
Tá sempre sendo atualizado.

Pra que serve um link antigo de download isolado, de versão desconhecida, harbour desconhecido e compilador C desconhecido?
Isso não ajuda, só atrapalha.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por Itamar M. Lins Jr. »

Olá!
Tem inclusive outras via SQLMIX...Usando comandos xBase.

Código: Selecionar todos

2019-02-11 13:09 UTC+0100 Aleksander Czajczynski (hb fki.pl)
  * contrib/sddsqlt3/core.c
    ! fix DBUSEAREA() operation with SQLITE3 SDD to return empty result
      when query conditions are false or the source table has no rows.

      Previously an logically correct example caused RTE:
      DBUSEAREA(,, "SELECT * FROM existing_table WHERE FALSE")

    ! fix double-free error in sqLite3Disconnect(), looks like the
      sqlite3_close() return value checking was reverted, SQLITE_OK is 0

    * use CDP API to get UTF8 string length

    * use new sqlite3_prepare_v3() when built against
      sqlite 3.20.0 or upper (change borrowed from Viktor's 3.4 fork)

    + add HB_SQLT3_MAP_DECLARED_EMULATED define (not yet enabled by default)
      which make this SDD additionally parse SQLite column declarations.
      Right now it can make HB_FT_DATE fields working using standard
      ISO 8601 "yyyy-mm-dd" syntax. Also declarations not significant for
      SQLite, but useful in xBase-style programming - SQL numeric(len,dec)
      columns are detected in this mode and will be reflected in dbStruct().

    + add support for alternative StoD() like syntax for HB_FT_DATE columns

    + add support for ISO 8601 "YYYY-MM-DD HH:MM:SS.FFF" timestamp declared
      columns, SQLite stored strings are converted to proper HB_FT_TIMESTAMP
      fields

    + added HB_SQLT3_FIELDNAME_STRICT define, which enables shortening
      of field to "name" if SQLite returns "table.name". Such fields are
      not completly usable in xBase code - WA->T.FIELD syntax is not
      valid, but FieldPos("t.field") is OK. I think it should be default
      behaviour or some runtime setting should be introduced for convenience
      when working with specific SQL queries.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por rochinha »

Amiguinhos,
Se não entendeu, SQLITE faz parte do Harbour.
Tá sempre sendo atualizado.

Pra que serve um link antigo de download isolado, de versão desconhecida, harbour desconhecido e compilador C desconhecido?
Isso não ajuda, só atrapalha.
Eu só repostei o link que o claudiochaves indagou.

Eu não levantei a hipótese de se usar outra versão de harbour, xharbour, hmgseilaoquê, seja lá o que for.

Por acaso ele perguntou algo relativo a qual versão do harbour, xharbour, clipper sei la...que tinha SQLIte?

Fiz pelo bom senso ou me intrometi?

Talvez tenha tomado a frente do mestres. DESCULPAEH!
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por Itamar M. Lins Jr. »

Olá!
O importante é participar!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por JoséQuintas »

rochinha escreveu:Fiz pelo bom senso ou me intrometi?
Talvez tenha tomado a frente do mestres. DESCULPAEH!
INFELIZMENTE, já faz algum tempo que suas mensagens não fazem sentido.
Na prática parece que nem lê as mensagens e sai postando qualquer coisa.

Este tópico deveria ser totalmente APAGADO.
O Rochinha ERROU ao criar o tópico.
Como deu pra ver, anos depois está causando problema.

FAZ PARTE DO HARBOUR, NÃO TEM QUE BAIXAR NADA, TODO MUNDO TEM ISSO NA MÁQUINA.
Mesmo assim, ainda mostra uma maneira de como baixar o tal arquivo, como se fosse novidade.
E acha certo ?

Aonde está o bom senso nisso ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por JoséQuintas »

* Developed using:
* Harbour 0.42 or upper
* Borland C++ BCC 5.5.1
Uia, é pra Harbour 0.42
E na seção de Clipper.

Como eu disse, tá errado desde o começo.
O melhor é apagar TUDO.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá exaltado por pouca coisa.
Todo mundo erra... Nem foi tão errado assim... Quem pediu foi atendido. É bom que ler mais.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por rochinha »

Amiguinhos,
INFELIZMENTE, já faz algum tempo que suas mensagens não fazem sentido.
Não devem fazer sentido para você, que se acha estar em um patamar de onde pode decidir quem posta e o que posta. Se não é do seu interesse, cale-se e deixe para outro que se interesse.
Na prática parece que nem lê as mensagens e sai postando qualquer coisa.
Já olhou suas postagens? mas responda: Quantas vezes fui nelas te agredir?
Este tópico deveria ser totalmente APAGADO.
O Rochinha ERROU ao criar o tópico.
Como usuário não posso apagar meus posts depois que receberam outros post, mas vocé é MODERADOR, apague...
Como deu pra ver, anos depois está causando problema.


20 anos depois você descobriu que tá causando problemas.
FAZ PARTE DO HARBOUR, NÃO TEM QUE BAIXAR NADA, TODO MUNDO TEM ISSO NA MÁQUINA.
Mesmo assim, ainda mostra uma maneira de como baixar o tal arquivo, como se fosse novidade.
E acha certo ?
Se o forense tá precisando exatamente DESTA é porque ele não quer outra. Qualquer um com meio neurônio ficaria curioso por tal informação.

Quintas Eu tô igual aquele personagem Tolerância Zero. Mas pelo meu histórico de nunca interpelar nenhum componente, manter educação vou te poupar.

Mas só pra voce entender o tópico é de 2006, ano 2006, entendeu...2006. Você entrou no forum em 2007. Cagar regra sobre algo que aconteceu antes de você nascer é dureza.

Em 2006, veja bem, em 2006 o forum Clipper on Line, tem um Clipper no nome? era único sem divisões como as que tem hoje. E creio que estávamos engatinhando em Harbour.

Finalizando, seja um profissional, traga soluções. Você poderia ter evitada esta celeuma colocando no seu post a seguinte mensagem:

claudiochaves esta ferramenta de linha de comando é muito antiga e as versões de harbour/xharbour nos dias de hoje já contemplam acesso ao banco de dados SQLite. Posso te enviar ou indicar exemplos de uso.

Uma forma elegante de REALMENTE AJUDAR.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por JoséQuintas »

rochinha escreveu:Finalizando, seja um profissional, traga soluções. Você poderia ter evitada esta celeuma colocando no seu post a seguinte mensagem:
claudiochaves esta ferramenta de linha de comando é muito antiga e as versões de harbour/xharbour nos dias de hoje já contemplam acesso ao banco de dados SQLite. Posso te enviar ou indicar exemplos de uso.
Uma forma elegante de REALMENTE AJUDAR.
Cláudio Chaves, ISSO NÃO É FERRAMENTA DE LINHA DE COMANDO.
Esse é um fonte muito antigo, do tempo que o Harbour nem trabalhava direito com DBF, e acho que nem existia XHarbour.
Se tem o Harbour já tem isso nele, e totalmente funcional.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais uma alternativa FREE com codigo aberto para usar SQL...

Mensagem por JoséQuintas »

rochinha escreveu:Finalizando, seja um profissional, traga soluções. Você poderia ter evitada esta celeuma colocando no seu post a seguinte mensagem:
claudiochaves esta ferramenta de linha de comando é muito antiga e as versões de harbour/xharbour nos dias de hoje já contemplam acesso ao banco de dados SQLite. Posso te enviar ou indicar exemplos de uso.
Uma forma elegante de REALMENTE AJUDAR.
Não, mais profissional:

Cláudio Chaves:

Baixar de links desconhecidos é extremamente perigoso.
Talvez até pior quando é de links desativados, pode indicar que o conteúdo pode ser prejudicial ou que não tem mais valor mesmo.
Como deve ter percebido, quem colocou o link nem sabe o que tem nele, o que deixa tudo mais perigoso.

Procure pesquisar no google, que vai encontrar várias fontes disso com exemplo.
Harbour e HMG são dois que conheço que tem SQLite atualizados.
Não precisa nada adicional.

Mesmo assim, se quiser optar por usar ADO, tem ODBC pra SQLite.
exemplo simples usando ADO acessando MediaMonkey:

Código: Selecionar todos

PROCEDURE PTESSQLITE

   LOCAL cnSQL := SQLiteConnection( "D:\TOOLS\MediaMonkey\MM.DB" )
   LOCAL oTBrowse, oRs

   WITH OBJECT oRs := cnSQL:Execute( "SELECT Songs.ID, SongTitle, playcounter, FileLength, SongLength, Rating," + ;
         " IDAlbum, Artists.Artist, Albums.Album" + ;
         " FROM Songs" + ;
         " LEFT JOIN Albums ON Albums.ID = Songs.IDAlbum" + ;
         " LEFT JOIN ArtistsSongs ON ArtistsSongs.IDSong = Songs.ID" + ;
         " LEFT JOIN Artists ON Artists.ID = ArtistsSongs.IDArtist" + ;
         " WHERE EXTENSION = 'MP3'" + ;
         " group by songs.id" + ;
         " ORDER BY playcounter DESC" + ;
         " LIMIT 300" )
       DO WHILE ! :Eof()
           ? :Fields( "ID" ):Value, ;
         :Fields( "Artist" ):Value, ;
         :Fields( "SongTitle" ):Value, ;
         :Fields( "PlayCounter" ):Value, ;
         :Fields( "Album" ):Value, ;
         :Fields( "FileLength" ):Value, ;
         :Fields( "SongLength" ):Value
      :MoveNext()
      ENDDO
      :Close()
   ENDWITH
   cnSQL:Close()

   RETURN

FUNCTION SQLiteConnection( cFileName )

   LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )

   oConexao:ConnectionString := "Provider=MSDASQL;" + ;
      "Driver={SQLite3 ODBC Driver};Database=" + cFileName + ";"
   oConexao:CursorLocation := 3
   oConexao:CommandTimeOut := 20

   RETURN oConexao
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Trancado