Aparentemente encontrei 2 problemas no Harbour 3.0 (oficial, estável) nas funções FBCreateDB e FBQuery! existentes na contrib hbfbird!
A função FBQuery não aceita strings com mais de 255 caracteres! OBS : este problema não ocorre na FBExecute!
E a função FBCreateDB mantem o banco aberto em memoria após a criação!
Bom, para tentar resolver os problemas acima, compilei o Harbour 3.4 e o problema da FBQuery foi resolvida! :)Pos
Mas o outro persiste! :(Neg
Talvez ngm tenha percebido porque não precisa deletar o banco criado após o FBCreateDB, mas eu estou neste caso porque trata-se de um banco temporário que vai ser zipado no fim e deve sumir da pasta!
A solução é ter um banco vazio já criado! ai basta copiar para um outro nome e conectar nele...
bom, fica a dica se alguém passar por isto!
Exemplo
FBCreateDB
Código: Selecionar todos
LOCAL cServer := "localhost:"
LOCAL cDatabase := "teste.fdb"
LOCAL cUser := "SYSDBA"
LOCAL cPass := "masterkey"
LOCAL nPageSize := 1024
LOCAL cCharSet := "UTF8"
LOCAL nDialect := 1
LOCAL tmp
hb_vfErase( cDatabase )
? tmp := FBCreateDB( cServer + cDatabase, cUser, cPass, nPageSize, cCharSet, nDialect ), FBError( tmp )
dele file &(cDatabase) && não vai deletar o arquivo...
Código: Selecionar todos
LOCAL cServer := "localhost:"
LOCAL cDatabase := "teste.fdb"
LOCAL cUser := "SYSDBA"
LOCAL cPass := "masterkey"
LOCAL nPageSize := 1024
LOCAL cCharSet := "UTF8"
LOCAL nDialect := 1
LOCAL trans, qry
LOCAL db, x, y
LOCAL num_cols
LOCAL columns
LOCAL fetch_stat
LOCAL tmp
hb_vfErase( cDatabase )
? tmp := FBCreateDB( cServer + cDatabase, cUser, cPass, nPageSize, cCharSet, nDialect ), FBError( tmp )
/* Connect rdbms */
IF HB_ISNUMERIC( db := FBConnect( cServer + cDatabase, cUser, cPass ) )
? "Error:", db, FBError( db )
RETURN
ENDIF
IF HB_ISNUMERIC( trans := FBStartTransaction( db ) )
? "Error:", trans, FBError( trans )
ELSE
? tmp := FBQuery( db, "create table "+SPACE(255)+" teste (code smallint)", nDialect, trans ), FBError( tmp ) && vai dar erro no HB 3.0
? tmp := FBCommit( trans ), FBError( tmp )
ENDIF
? "Status Execute:", tmp := FBExecute( db, 'insert into teste(code) "+SPACE(255)+" values (1)', nDialect ), FBError( tmp ) && este comando não apresenta problemas de tamanho no HB 3.0
/* Close connection with rdbms */
? "Status Close Database:", tmp := FBClose( db ), FBError( tmp )
:xau
