1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] exemplo insert em Ms-Sql via progress (ODBC).

Discussão em 'EMS , HCM e Totvs 11' iniciado por reissobr, Agosto 19, 2014.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. reissobr

    reissobr Membro Participativo

    Pessoal,

    Alguem tem um exemplo de como posso executar um comando INSERT em uma tabela do Ms-Sql dentro de um programa progress ?

    A parte do ODBC eu montei, a conexao ao banco funcionou, consegui fazer um SELECT, mas nao acerto o formato do INSERT.

    Att;
    Russo.
  2. reissobr

    reissobr Membro Participativo

    Pessoal,
    Funcionou.

    Peço que desconsiderem o tópico.
  3. michel

    michel Membro Participativo

    Este exemplo era usado para o access a tempo a traz mas também funciona no mysql

    assign ado-query = "select nfe, chave, protocolo, situacao from nfes where situacao='IMPORTADO'".
    assign ado-driver = "'DRIVER=" + CHR(123) + "Microsoft Access Driver (*.mdb)}" + ";DBQ=" + banco + "'".
    assign ado-connec = "Provider=MSDASQL.1;Persist Security Info=True" + ";Extended Properties=" + ado-driver.
    create "ADODB.Connection" ObjConnection.
    create "ADODB.RecordSet" ObjRecordSet.
    create "ADODB.Command" ObjCommand.
    objConnection:OPEN(ado-connec, ado-userid, ado-passwd, 0) no-error.
    assign objCommand:ActiveConnection = objConnection.
    assign objCommand:CommandText = ado-query.
    assign objCommand:CommandType = 1.
    assign objConnection:CursorLocation = 3.
    assign objRecordSet:CursorType = 1.
    assign objRecordSet:LockType = 3.
    assign objRecordSet = objCommand:EXECUTE(OUTPUT ado-null,"",32).
    assign ado-reccount = objRecordSet:RecordCount.
    do transaction:
    if (ado-reccount > 0) and not (ado-reccount = ?) then do:
    objRecordSet:MoveFirst no-error.

    do while ado-cursor < ado-reccount:
    assign nfe = string(objRecordSet:FIELDS("nfe"):VALUE, "9999999").
    assign protocolo = objRecordSet:FIELDS("protocolo"):VALUE.
    assign chave-acesso = objRecordSet:FIELDS("chave"):VALUE.
    run pi-acompanhar in h-acomp (input "Importando Retorno Sefaz: " + string(nfe)).
    find first tt-nfe where tt-nfe.nfe = nfe no-lock no-error.
    if not avail tt-nfe then do:
    create tt-nfe.
    assign tt-nfe.nfe = nfe
    tt-nfe.protocolo = protocolo
    tt-nfe.chave-acesso = chave-acesso.
    end.
    assign ado-cursor = ado-cursor + 1.
    objRecordSet:MoveNext no-error.
    end.
    end.
    else
    assign ado-status = "No records found.".
    end.
    objConnection:CLOSE no-error.
    release OBJECT objConnection no-error.
    release OBJECT objCommand no-error.
    release OBJECT objRecordSet no-error.
    assign objConnection = ? ObjCommand = ? ObjRecordSet = ?.
    reissobr curtiu isso.
  4. gideaonery

    gideaonery Sem Pontuação

    Michel e Russo, preciso ler os dados na tabela do Progress e gravar numa tabela no SQL Server. Vcs tem alguma solução pra isso?

    Estou tentando assim, porém o Progress não aceita a sintaxe:

    FIND LAST emitente NO-LOCK.
    ASSIGN query = "INSERT INTO [banco].[Tabela] (Campo) VALUES(emitente.cod-emitente)".

    Se puderem ajudar.
    Obrigado.

    Arquivos Anexados:

  5. reissobr

    reissobr Membro Participativo

    Tudo bom @gideaonery ?

    Observe a clausula VALUES. Do jeito que voce colocou, o progress nao coloca o valor do campo emitente.cod-emitente na clausula Values.
    A forma que achei foi montar uma string usando o recurso de concatenação.
    Coloquei abaixo como fiz. Espero que ajude.


    ASSIGN ODBC-QUERY = "INSERT INTO tabela (op,oper,codpeca,maq,plandtini,plandtfim,planqty,cycqty,plantmunit,plantsetup,acao,status)" +
    "VALUES ('" + STRING(split-operac.nr-ord-produ,"9999999") + "','" + STRING(split-operac.op-codigo,"999") + "','" +
    STRING(ord-prod.it-codigo) + "','" + STRING(split-operac.gm-codigo) + "','" +
    STRING(w-data-hora-ini) + "','" + STRING(w-data-hora-fim) + "','" +
    STRING(split-operac.qtd-previs-operac) + "','" + STRING(w-qt-por-ciclo) + "','" +
    STRING(w-tempo-unit-ciclo) + "','" + STRING(split-operac.tempo-pad-setup) + "','" +
    "1" /* Acao = inclusao */ + "','" + "0" /* status = nao processado */ + "')".
    gideaonery curtiu isso.
  6. pizzaia

    pizzaia Membro Participativo

    ótimo @reissobr .
    se usar o substitute poderia ficar mais limpo

    Código:
    ASSIGN
        ODBC-QUERY = "INSERT INTO tabela (campo1, campo2, campo3)"
        + substitute(" VALUES (&1, '&2', '&3') "
                     , emitente.cod-emitente
                     , emitente.nome-emit
                     , string(emitente.data-implant,'99/99/9999')
                     ).
    
    gideaonery e reissobr curtiram isso.
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página