Tô querendo usar algum banco SQL pra testes, mas de preferência sem precisar instalar nada.
Tem algum ainda assim ?
SQLite depende de odbc....
ADS depende de odbc...
MySQL depende de servidor....
Access mesmo talvez ?
Qual SQL simples dá pra usar local que não fuja muito do padrão
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20541
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 2 vezes
Qual SQL simples dá pra usar local que não fuja muito do padrão
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
-
alxsts
- Colaborador

- Mensagens: 3172
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 5 vezes
Re: Qual SQL simples dá pra usar local que não fuja muito do padrão
Olá!
Segundo o Gemini, existem algumas opções online:
Segundo o Gemini, existem algumas opções online:
Existem excelentes opções de RDBMS online para testar comandos e consultas sem precisar instalar nada, sendo as melhores alternativas: DB Fiddle, SQL Fiddle, e Oracle Live SQL.
Principais Plataformas Online
DB Fiddle: Suporta MySQL, PostgreSQL e SQLite de forma simples e rápida no navegador.
DB Fiddle - SQL Database Playground htt ... iddle.com/
SQL Fiddle: Ideal para testar, comparar e compartilhar esquemas e consultas entre diferentes SGBDs relacionais.
SQL Fiddle - Online SQL Compiler for le ... 2sVX5mkaXx
Oracle Live SQL: Um ambiente completo e gratuito fornecido pela Oracle para rodar comandos avançados e PL/SQL direto na nuvem. Tem opções de aplicação de Inteligência Artificial.
Oracle AI Database Free | Oracle https: ... ZVcHnzO0QS
W3Schools SQL Editor:
Muito fácil de usar para iniciantes que desejam testar comandos SQL básicos de forma imediata.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20541
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 2 vezes
Re: Qual SQL simples dá pra usar local que não fuja muito do padrão
Corrigindo:
É pra testar outras coisas, e não o SQL.
Digamos que seja pra testar o aplicativo sem um SQL pesado.
É pra testar outras coisas, e não o SQL.
Digamos que seja pra testar o aplicativo sem um SQL pesado.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8178
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 6 vezes
- Curtiram: 1 vez
Re: Qual SQL simples dá pra usar local que não fuja muito do padrão
Olá!
SQLITE sem ODBC, sem nada.
O programa demo.prg
SQLITE sem ODBC, sem nada.
Código: Selecionar todos
itamar@itamar-I7:~/dev/hb32/contrib/hbsqlit3/tests$ hbmk2 demo.prg
hbmk2: Processando script local: hbmk.hbm
Harbour 3.2.0dev (r2602281433)
Copyright (c) 1999-2025, https://harbour.github.io/
Compiling 'demo.prg'...
Lines 455, Functions/Procedures 3
Generating C source output to '/tmp/hbmk_6aw7lo.dir/demo.c'... Done.
itamar@itamar-I7:~/dev/hb32/contrib/hbsqlit3/tests$ ./demo
3.44.2
CREATE TABLE t1 - Ok
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: 1
Total changes: 4
INSERT INTO t1( name, age ) VALUES( 'Andy', 17 ) - Done
INSERT INTO t1( name, age ) VALUES( 'Mary', 19 ) - Done
The number of database rows that were changed: 1
Total changes: 6
Last _ROWID_: 6
SELECT * FROM t1 WHERE name == 'Andy'
Record # 1
Column name :
Column type : SQLITE_NULL
Column value: NULL
Column name : id
Column type : SQLITE_INTEGER
Column value: 5
Column name : name
Column type : SQLITE_TEXT
Column value: Andy
Total records - 1
SELECT * FROM t1 WHERE age >= 40
Record # 1
Column name : id
Column type : SQLITE_INTEGER
Column value: 1
Column name : name
Column type : SQLITE_TEXT
Column value: Bob
Column name : age
Column type : SQLITE_INTEGER
Column value: 52
Record # 2
Column name : id
Column type : SQLITE_INTEGER
Column value: 2
Column name : name
Column type : SQLITE_TEXT
Column value: Fred
Column name : age
Column type : SQLITE_INTEGER
Column value: 40
Total records - 2
SELECT id, name, age + 5 FROM t1
id
name
age + 5
SQLITE_NULL
SQLITE_NULL
SQLITE_NULL
INTEGER
TEXT
sqlite3_get_table
name age
Andy 17
Mary 19
itamar@itamar-I7:~/dev/hb32/contrib/hbsqlit3/tests$
Código: Selecionar todos
/*
* SQLite3 Demo
*
* Copyright 2007 P.Chornyj <myorg63@mail.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file LICENSE.txt. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#require "hbsqlit3"
#include "fileio.ch"
#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
#ifdef TRACE
LOCAL hTraceFile, hProfileFile
#endif
IF ! Empty( db )
#ifdef TRACE
IF sqlite3_libversion_number() < 3014000
sqlite3_profile( db, .T. )
sqlite3_trace( db, .T. )
ELSE
hTraceFile := FOpen( "hbsq3_tr.log", FO_READWRITE + HB_FO_CREAT )
FSeek( hTraceFile, 0, FS_END )
hProfileFile := FOpen( "hbsq3_pr.log", FO_READWRITE + HB_FO_CREAT )
FSeek( hProfileFile, 0, FS_END )
sqlite3_trace_v2( db, SQLITE_TRACE_STMT + SQLITE_TRACE_PROFILE, {| nMask, pStmt, x |
IF nMask == SQLITE_TRACE_STMT
IF hb_LeftEq( x, "--" )
FWrite( hTraceFile, x + hb_eol() )
ELSE
FWrite( hTraceFile, sqlite3_expanded_sql( pStmt ) + hb_eol() )
ENDIF
ELSEIF nMask == SQLITE_TRACE_PROFILE
FWrite( hProfileFile, sqlite3_expanded_sql( pStmt ) + " - " + hb_NToS( x ) + hb_eol() )
ENDIF
RETURN 0
} )
ENDIF
#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
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8178
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 6 vezes
- Curtiram: 1 vez
Re: Qual SQL simples dá pra usar local que não fuja muito do padrão
Olá!
Com SQLMIX + SQLITE. Sem nada tudo nativo do Harbour mesmo.
Atenção, tive que adicionar #include "dbinfo.ch" no exemplo que estava faltando.
Exemplo na pasta -> contrib/sddsqlt3/tests/test.prg do Harbour.
O arquivo test.sqlite3 -. Está na pasta contrib/sddsqlt3/tests do Harbour
Com SQLMIX + SQLITE. Sem nada tudo nativo do Harbour mesmo.
Atenção, tive que adicionar #include "dbinfo.ch" no exemplo que estava faltando.
Exemplo na pasta -> contrib/sddsqlt3/tests/test.prg do Harbour.
Código: Selecionar todos
#require "rddsql"
#require "sddsqlt3"
#include "simpleio.ch"
#include "dbinfo.ch"
REQUEST SDDSQLITE3, SQLMIX
PROCEDURE Main()
LOCAL tmp
#if defined( __HBSCRIPT__HBSHELL )
rddRegister( "SQLBASE" )
rddRegister( "SQLMIX" )
hb_SDDSQLITE3_Register()
#endif
Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
rddSetDefault( "SQLMIX" )
AEval( rddList(), {| X | QOut( X ) } )
? "-1-"
? "Connect:", tmp := rddInfo( RDDI_CONNECT, { "SQLITE3", hb_DirBase() + "test.sqlite3" } )
IF tmp == 0
? "Unable connect to the server"
ENDIF
? "-2-"
? "Use:", dbUseArea( .T., , "select * from t1", "t1" )
? "-3-"
? "Alias:", Alias()
? "-4-"
? "DB struct:", hb_ValToExp( dbStruct() )
? "-5-"
FOR tmp := 1 TO FCount()
? FieldName( tmp ), hb_FieldType( tmp )
NEXT
? "-6-"
Inkey( 0 )
Browse()
INDEX ON FIELD->AGE TO age
dbGoTop()
Browse()
dbCloseArea()
RETURN
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20541
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 2 vezes
Re: Qual SQL simples dá pra usar local que não fuja muito do padrão
Acho que não pensei direito, parece que alternativas só vão criar mais trabalho.
As particularidades de cada banco de dados acabam destruindo a possibilidade de padronizar.
Vou pensar mais sobre como vou querer resolver por aqui.
As particularidades de cada banco de dados acabam destruindo a possibilidade de padronizar.
Vou pensar mais sobre como vou querer resolver por aqui.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/