Página 4 de 4 PrimeiroPrimeiro 1234
+ Responder ao Tópico



  1. opa, vamo la entao, bom antes de mais nada eu falei sobre ter colocado o return antes da funcao exatamente para saber onde ta o erro, como eu vi q se colocar antes do put ele retorna normal e q se eu colocar depois ele da erro, eu vi q o problema esta realmente no put (e nao na passagem de memoria, como dito anteriormente)....agora respondendo as perguntas

    1 - o retorno de db->put h um inteiro que pode ser igual a zero caso nao retorne erro, ou diferente de zero se ocorrer um erro

    2 - é db->put pois db eh um ponteiro pra uma outra estrutura (q eu ainda nao achei como eh definida), ou seja a variavel db eh declarada assim: DB *db; e eh essa variavel que vai armazenar a "conexao" com o banco de dados

    3 - o tipo foi dito acima, e os parametros sao os seguintes:
    int DB->put(DB *db,DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);

    onde:

    DB *db - eh o ponteiro de conexao com o banco
    DB_TXN *txnid - Ainda nao entendi o que eh, mas na documentacao diz o seguinte:
    "txnid
    If the operation is to be transaction-protected, (other than by specifying the DB_AUTO_COMMIT flag), the txnid parameter is a transaction handle returned from DB_ENV->txn_begin; otherwise, NULL."

    DBT *key - eh a chave que identifica o dado pra quando eu for pega-lo do banco com o db->get()

    DBT *data - sao os dados em si, que no meu caso eh a estrutura

    u_int32_t flags - Sao flags opcionais pra identificar como vai inserido o dado, tem a opcao de nao inserir duplicado, tem de auto-commit e outras, mas no meu caso eu uso 0(zero)

  2. #17
    fricardo
    Alguns links q vc deve achar interessantes:

    http://www.sleepycat.com/docs/api_cxx/db_class.html -- Definição da classe DB
    http://www.sleepycat.com/docs/api_c/db_list.html -- lista de métodos relacionados a DB

    DB é uma classe. Um trecho do primeiro link q torna claro a relação entre esta classe e a API C do Berkeley DB está a seguir:

    -----------------------------------------
    Each Db object has an associated DB struct, which is used by the underlying implementation of Berkeley DB and its C-language API. The Db::get_DB method returns a pointer to this struct. Given a const Db object, Db::get_const_DB returns a const pointer to the same struct.

    Given a DB struct, the Db::get_Db method returns the corresponding Db object, if there is one. If the DB object was not associated with a Db (that is, it was not returned from a call to Db::get_DB), then the result of Db::get_Db is undefined. Given a const DB struct, Db::get_const_Db returns the associated const Db object, if there is one.
    ---------------------------------------

    Valeu SDM, hez4el, aprendi muito com vcs.

    fricardo



  3. Citação Postado originalmente por fricardo
    http://www.sleepycat.com/docs/api_cxx/db_class.html -- Definição da classe DB
    http://www.sleepycat.com/docs/api_c/db_list.html -- lista de métodos relacionados a DB
    ...
    Given a DB struct, the Db::get_Db method returns the corresponding Db object, if there is one. If the DB object was not associated with a Db (that is, it was not returned from a call to Db::get_DB), then the result of Db::get_Db is undefined. Given a const DB struct, Db::get_const_Db returns the associated const Db object, if there is one.
    ---------------------------------------
    Eae fricado, valeu, eu to me baseando nesse doc desde q comecei.....soh q como meu ingles eh fraco eu to apanhando um poco, mas msm assim valeu, e quanto a segunda parte, ela nao seria do C++?? pq o primeiro link se refere a api do c++ se nao me engano.... bom eh isso ae.....vo apanha mais um poco aqui.....e o link q eu acho q poderia resolver meu problema eh esse aqui:

    http://www.sleepycat.com/docs/ref/am_misc/struct.html

    soh q eu num to consiguindo entender mto bem....
    :cry:

  4. #19
    fricardo
    Citação Postado originalmente por SDM
    o link q eu acho q poderia resolver meu problema eh esse aqui:

    http://www.sleepycat.com/docs/ref/am_misc/struct.html

    soh q eu num to consiguindo entender mto bem....
    :cry:
    Eu vou tentar dar uma ajuda. Eu li o documento e lá ele diz q há duas maneiras de armazenar estruturas e objetos no Berkeley DB.

    A primeira está mostrada nos dois primeiros trechos de código. Esta técnica eh conhecida como "marshalling" e, basicamente vc cria uma estrutura auxiliar intermediária para transferir os dados. Vc vai preenchendo um array de bytes copiando os dados de info para data_buffer. Isto eh feito antes de armazenar no Berkeley DB. O segundo trecho de código tbm faz parte da primeira maneira de armazenar, mas ela é o "unmarshall". Repare q ele faz o contrário do primeiro código. Isto eh quando tiver q ler tudo, aí é preciso transferir o conteúdo para data_buffer e depois pra info.

    A segunda maneira de armazenar foi a q vc usou segundo o código q vc postou. Ela eh mais simples mas soh pode ser usada para o caso em q vc tem na estrutura um único campo de comprimento na estrutura como abaixo:

    Código :
    struct {
    	int a, b, c;
    	u_int8_t buf[1];
    } info;

    Todo código após esse (terceiro trecho) fala de como armazenar no BD esta struct.

    Eu só tentei te dar uma visão geral, até porque eu nao tenho muita base pra entrar mais em detalhes.

    Bom trabalho,
    fricardo






Tópicos Similares

  1. Respostas: 11
    Último Post: 30-08-2007, 22:43
  2. Colocar uma case dentro de outra
    Por morronix no fórum Linguagens de Programação
    Respostas: 1
    Último Post: 08-01-2007, 07:25
  3. Como colocar uma tela de login num Linux em modo TXT ?
    Por Izzyt no fórum Servidores de Rede
    Respostas: 9
    Último Post: 19-11-2005, 09:30
  4. Respostas: 4
    Último Post: 13-09-2004, 16:26
  5. Respostas: 2
    Último Post: 11-05-2004, 14:27

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L