Ir para conteúdo
Fórum Script Brasil

MICHELI_MARTINS

Membros
  • Total de itens

    84
  • Registro em

  • Última visita

Posts postados por MICHELI_MARTINS

  1. Boa tarde.

    Possuo um sistema em delphi 2010, que roda normalmente em windows 7 e windows vista e em rede.

    Acontece que preciso coloca-lo em uma maquina com windows xp.

    Quando peço a execução ocorre esse erro:

    Não foi possível localizar o ponto de entrada do procedimento com a msvcrt.dll.

    Tentei substituir a dll no xp por uma mais nova, mas a maquina depois nem entrava o operacional. Tive que voltar a dll antiga.

    alguém sabe como resolver isso?

    Meu sistema é banco sql 2005 e uso componentes ado para conexao.

    Obrigada.

  2. bom dia.

    tenho um select que funciona perfeitamente no sql 2005, porem quando jogo ele na query no delphi da erro

    [DCC Error] relatorios.pas(877): E2015 Operator not applicable to this operand type

    no sql 2005:

    select distinct substring(convert(char,year(data)),1,4) +'/'+ substring(convert(char,month(data)),1,2) as mesano

    from orcamentos

    no delphi

    sql.Clear;

    sql.Add(' select distinct substring(convert(char,year(data)),1,4)+'/'+substring(convert(char,month(data)),1,2) as mesano, ');

    o problema esta no '/' que o delphi não consegue interpretar.

    como resolvo isso?

    obrigada.

  3. na verdade a linha fica assim:

    SendMessage(CaptureWindow, WM_CAP_FILE_SAVEDIB, 0, longint(PAnsichar('c:\temp\sample.bmp'))); -- tirei o 1 do final.

    Aqui ele grava certo, desde que as opçoes de segurança da maquina permitam.

    o problema (acredito eu) vem do pansichar com o meu path (que é d:\) não sei porque.

    se eu colocar direto SendMessage(CaptureWindow, WM_CAP_FILE_SAVEDIB, 0, longint(PAnsichar('d:\sample.bmp'))); ele grava

    agora se eu coloco

    SendMessage(CaptureWindow, WM_CAP_FILE_SAVEDIB, 0, longint(PAnsichar(path + 'sample.bmp'))); não grava, isso considerando meu path como d:\

    é esse o problema so não sei como resolver tanto que esse codigo no 2007 funcionava, mas ao invés de pansichar era so char.

  4. bom ate onde eu vi não precisa instalar compenente. eu estou usando essa funçao aqui:

    function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint; x : integer;

    y : integer;nWidth : integer;nHeight : integer;ParentWin : HWND; nId : integer): HWND; STDCALL EXTERNAL 'AVICAP32.DLL';

    que usa a dll externa avicap32.dll

    a captura da cam funciona mostra certinho então acho que todas as declarações foram feitas. ela so não esta salvando a imagem em bmp.

    faço assim:

    if CaptureWindow <> 0 then

    exit;

    CaptureWindow:= capCreateCaptureWindowA('CAPTURA CAM',WS_CHILD or WS_VISIBLE ,panel5.Left,panel5.Top,395,350,panel5.Handle,0);

    if CaptureWindow <> 0 then

    begin

    SendMessage(CaptureWindow, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_CALLBACK_ERROR, 0, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_CALLBACK_STATUS, 0, 0);

    SendMessage(CaptureWindow, WM_CAP_DRIVER_CONNECT, 0, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_SCALE, 1, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_PREVIEWRATE, 66, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_OVERLAY, 1, 0);

    SendMessage(CaptureWindow, WM_CAP_SET_PREVIEW, 1, 0);

    até aqui ta ok.

    problema é aqui:

    SendMessage(CaptureWindow, WM_CAP_GRAB_FRAME, 0, 0);

    SendMessage(CaptureWindow, WM_CAP_FILE_SAVEDIB, 0, longint(PAnsichar(path + 'tmp.bmp')));

    SendMessage(CaptureWindow, WM_CAP_DRIVER_DISCONNECT, 0, 0);

  5. boa tarde.

    pessoal ate então tinha um sistema em delphi 2007 que funcionava certinho. porem passei para delphi 2010 e a captura de video não esta salvando o bmp.

    o codigo:

    SendMessage(CaptureWindow, WM_CAP_FILE_SAVEDIB, 0, longint(char(path + 'tmp.bmp')));

    o problema é que no delphi 2010 não aceita char acusa erro de invalid typecast, tentei mudar para pchar mas não grava.

    alguém tem alguma ideia?

  6. ola jhonas. o problema é que este campo na tabela esta de fato vazio. e ele não esta trazendo ticado.

    é como se fosse assim:

    ticado = true

    não ticado = false

    sombreado = null

    entende?

    so que esse "null" com esse V no checkbox sombreado causa distorção pro usuario final que "acha" que a conta foi paga só porque o campo esta marcando este sombreamento.

    eu quero tirar esse sombreamento.

  7. boa tarde pessoal.

    tenho um aplicativo meu rodando tudo ok.

    quando clico para abertura de tela, os dbcheckboxes estao brancos desmarcados que no caso não trazem nada.

    o problema é quando abro a tabela, automaticamente o dbcheckbox muda para um v sombreado, apesar de não estar ticado, (pois o ticado fica negrito) gostaria de remover isso e deixar o branco normal.

    alguém sabe como tirar isso?

  8. não fulvio, ainda não deu.

    com esse select ele conta apenas um primeiro emplacamento e uma renovação licença entre os dias 3 e 4.

    nesses dois dias foram uma renovaçao licença e 3 primeiros emplacamentos.

    select count(s.servico), s.codigo

    from servicos s

    where

    s.codigo in (select it.grupo

    from itensorcamento it, orcamentos o

    where

    o.numero = it.codigoref

    and it.grupo=s.codigo

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-03' AND '2010-03-04')

    group by s.servico, s.codigo

    order by servico

    codigo

    ----------- --------------------

    1 1

    1 9

    preciso que apareça assim:

    codigo

    ----------- --------------------

    3 1

    1 9

    o que melhor se assemelha ao que eu preciso é esse select aqui:

    SELECT S.SERVICO, S.CODIGO

    FROM ITENSORCAMENTO I, ORCAMENTOS OS, SERVICOS S

    WHERE

    (I.CODIGOREF) = (OS.NUMERO)

    AND S.CODIGO = I.GRUPO

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-03' AND '2010-03-04'

    GROUP BY I.CODIGOREF,S.SERVICO,S.CODIGO

    SERVICO CODIGO

    ---------------------------------------- --------------------

    RENOVAÇÃO DA LICENÇA 9

    PRIMEIRO EMPLACAMENTO 1

    PRIMEIRO EMPLACAMENTO 1

    PRIMEIRO EMPLACAMENTO 1

    entre esses dias são 4 orcamentos, so que preciso que ele coloque desse jeito:

    SERVICO CODIGO total

    ---------------------------------------- --------------------

    RENOVAÇÃO DA LICENÇA 9 1

    PRIMEIRO EMPLACAMENTO 1 3

  9. Bom dia Micheli,

    A estrutura do 1º select que montou está errada. Perceba que você referencia a tabela "ORCAMENTOS" no primeiro select, e eu retirei o join com esta tabela, onde eu o referencio no subselect.

    Pegue o 1º select que passei e compare com o que postou logo acima.

    A diferença entre os dois é exatamente isto que explicou:

    - o 1º teria que retornar a quantidade de serviços, independente da quantidade de itens.

    - o 2º teria que retornar a quantidade de serviços, proporcional a quantidade de itens.

    Para fazer o teste rode o script:

    -- Criação
    create table #Servicos (servico int, codigo int)
    create table #itensorcamento (grupo int, codigoref int)
    create table #orcamentos (numero int)
    -- Inserção de dados
    insert into #Servicos (servico, codigo) values (1,100)
    insert into #itensorcamento (grupo, codigoref) values (100,500)
    insert into #orcamentos (numero) values (500)
    insert into #itensorcamento (grupo, codigoref) values (100,600)
    insert into #itensorcamento (grupo, codigoref) values (100,700)
    insert into #orcamentos (numero) values (600)
    insert into #orcamentos (numero) values (700)
    
    -- select que retorna a quantidade de serviços
    select s.servico, s.codigo
    from #servicos s, #itensorcamento i
    where s.codigo = i.grupo and i.codigoref = (select top 1 it.codigoref from #orcamentos orc,
    #itensorcamento it where orc.numero = it.codigoref and it.grupo=s.codigo)
    order by servico
    
    -- select que retorna a quantidade de serviços, proporcional aos itens
    select s.servico, s.codigo
    from #servicos s, #itensorcamento i
    where s.codigo = i.grupo and i.codigoref in (select it.codigoref from #orcamentos orc,
    #itensorcamento it where orc.numero = it.codigoref and it.grupo=s.codigo)
    order by servico

    Fulvio, eu rodei os dois scripts. Na verdade esta contando como se fosse os subitens e não o serviço em si. eu preciso que ele conte para cada orçamento o serviço e não os subitens dele.

    select count (s.servico), s.codigo

    from servicos s, itensorcamento i

    where

    s.codigo = i.grupo

    and i.codigoref = (select top 1 it.codigoref

    from orcamentos orc,

    itensorcamento it

    where orc.numero = it.codigoref

    and it.grupo=s.codigo

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-04' AND '2010-03-04')

    group by s.servico, s.codigo

    order by servico

    codigo

    ----------- --------------------

    10 1

    (1 row(s) affected)

    neste dia especifico entrou so um primeiro emplacamento que possui 10 subitens na itensorcamento referenciando o grupo 1 (serviços) entendeu? preciso que ele conte apenas o numero de serviços, porque na verdade so tem um orçamento com um primeiro emplacamento, com 10 subitens do primeiro emplacamento.

    teria que estar fazendo assim:

    select (s.servico), s.codigo

    from servicos s, itensorcamento i

    where

    s.codigo = i.grupo

    and i.codigoref = (select top 1 it.codigoref

    from orcamentos orc,

    itensorcamento it

    where orc.numero = it.codigoref

    and it.grupo=s.codigo

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-04' AND '2010-03-04')

    group by s.servico, s.codigo,i.codigoref

    order by servico

    servico codigo

    ---------------------------------------- --------------------

    PRIMEIRO EMPLACAMENTO 1

    so que se eu coloco o count no serviço ele me retorna 10 ao invés de 1.

  10. fulvio o primeiro select nem traz resultado,

    select s.servico, s.codigo

    from servicos s, itensorcamento i,ORCAMENTOS OS

    where

    s.codigo = i.grupo

    AND OS.NUMERO = I.CODIGOREF

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-03' AND '2010-03-04'

    and i.codigoref = (select top 1 it.codigoref

    from orcamentos orc,itensorcamento it

    where

    orc.numero = it.codigoref

    and it.grupo=s.codigo)

    order by servico

    o segundo traz mas continua trazendo uma totalização de itens de orcamento quando na verdade quero só o servico, é como se ele contasse o grupo em 10 serviços (por exemplo) para um mesmo orcamento.

    select COUNT(s.servico), s.codigo

    from servicos s, itensorcamento i,ORCAMENTOS OS

    where

    s.codigo = i.grupo

    AND OS.NUMERO = I.CODIGOREF

    AND CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN '2010-03-03' AND '2010-03-04'

    and i.codigoref in (select it.codigoref

    from orcamentos orc,itensorcamento it

    where

    orc.numero = it.codigoref

    and it.grupo=s.codigo)

    GROUP BY S.SERVICO,s.codigo

    order by servico

    nesse select, para o servico de codigo 1 esta trazendo 30 quando era pra trazer 3, e para o de codigo 9 esta trazendo 12 (que são seus 12 subitens), quando na verdade so existe um orçamento pra ele.

  11. o problema não é fazer o count. ate ai eu consigo fazer porem as tabelas estao alinhadas assim:

    os.numero i.codigoref s.servico

    uma ordem de servico possui varios itens de orcamento que pertencem ao grupo x

    so que no caso eu preciso para cada ordem de servico contar apenas uma vez o servico e não todas as vezes que ele aparecer na itens de orcamento

    se eu fizer o count direto ao invés de 3 primeiros emplacamentos ele vai me jogar 10 primeiros emplacamentos por causa da itens de orcamento (cada servico, no caso primeiro emplacamento possui varios subitens necessarios).

    precisaria de algo como o distinct que conta apenas uma vez...

    não sei se consegui te passar o problema..

  12. gente boa tarde. estou com uma duvida aqui... é o seguinte tenho um script de sql assim:

    select (s.servico), s.codigo

    from servicos s, itensorcamento i, orcamentos os

    where

    s.codigo = i.grupo

    and os.numero = i.codigoref

    and cast(floor(cast(data as float)) as datetime) between '2010-03-03' and '2010-03-04'

    group by s.servico, s.codigo, os.numero

    order by servico

    que me retorna no banco:

    servico codigo

    primeiro emplacamento 1

    primeiro emplacamento 1

    primeiro emplacamento 1

    renovaçao licenca 9

    acontece que eu queria contar os tipos de servico por exemplo no caso do primeiro emplacamento seriam 3 e na renovacao licença seria 1

    como faço isso?

  13. gente bom dia. estou há uma semana tentando achar uma solução para o meu problema porem ainda não consegui.

    tenho um relatorio que mostra os dados de clientes agrupados por loja (uma banda grupo, uma detalhe) com a seguinte query :

    SELECT LOJA,DATA,NUMERO,PLACA,CLIENTE,VALORCONTRATADO,VALORSERVICOS,ADIANTAMENTO1,

    ADIANTAMENTO2,ADIANTAMENTO3,TOTALGERAL,HONORARIOS

    FROM ORCAMENTOS

    WHERE

    CAST(FLOOR(CAST(DATA AS float)) AS datetime) BETWEEN :DATAINICIAL AND :DATAFINAL

    AND (PRONTO <> 'TRUE' OR PRONTO IS NULL)

    AND (LOJA = :LOJA or :LOJA = '')

    GROUP BY LOJA,DATA,NUMERO,PLACA,CLIENTE,VALORCONTRATADO,VALORSERVICOS,ADIANTAMENTO1,

    ADIANTAMENTO2,ADIANTAMENTO3,TOTALGERAL,HONORARIOS

    ORDER BY LOJA

    e preciso montar uma outra query que no caso mostraria uma totalizaçao de serviços feitos ( não valores, mas sim quantidades de cada serviço que foi feito naquele mes). esta segunda query ficou assim:

    SELECT COUNT(S.CODIGO) AS QUANTIDADE, S.SERVICO

    FROM SERVICOS S, ITENSORCAMENTO O, ORCAMENTOS OS

    WHERE

    S.CODIGO = O.GRUPO

    AND O.CODIGOREF = OS.NUMERO

    AND (PRONTO <> 'TRUE' OR PRONTO IS NULL)

    AND (LOJA = :LOJA or :LOJA = '')

    AND OS.NUMERO = :NUMERO

    GROUP BY SERVICO

    ORDER BY SERVICO

    no sql server ela mostra certinho o total de serviços agrupados, porem o problema esta sendo juntar as duas no quick, uma vez que são independentes.

    se no caso eu montasse o relatorio com apenas esta ultima ele apareceria normal como no sql, já que a propriedade do quickrep1 estaria apontando para tabela servicos.

    o problema está no quickprep1 porque ele tem que apontar para a tabela central orcamentos e quando eu faço isso não consigo uma totalização de quantidades de serviços, e sim uma subdetalhe de cada orçamento printado.

    o que eu preciso é que ele mostre todos os orçamentos e no final do relatorio me diga quantidade de serviço e nome do serviço para cada tipo de serviço prestado.

    existe algum jeito de fazer isto?

  14. bom dia pessoal. estou com essa mensagem de erro quando dou um ok em um botao que faz o post da gravação no banco sql.

    porem não estou conseguindo localizar o erro. eu ate entendo que ele esta pedindo um insert ou um edit antes de dar o post.

    so que mesmo fazendo o debug a aplicação para em cima do post e não me deixa localizar onde esta o erro. alguém sabe como eu posso fazer o debug localizar isso pra mim?

    segue um pedaço do codigo do botao ok:

    begin

    IF APPLICATION.MessageBox('CONFIRMA A INCLUSÃO OU A ' + 'ALTERAÇÃO DESTE REGISTRO? ', 'CONFIRMAÇÃO', MB_YESNO + MB_ICONINFORMATION) =

    IDYES THEN

    BEGIN

    TABELANUMEROS.SQL.Clear;

    TABELANUMEROS.SQL.ADD('UPDATE NUMEROS SET USADO =:USADO WHERE NUMERO =:NUMERO AND USUARIO =:USUARIO');

    TABELANUMEROS.ParamByName('USUARIO').ASSTRING:= DBUSUARIO.Text;

    TABELANUMEROS.PARAMBYNAME('NUMERO').ASSTRING:= DBNUMERO.TEXT;

    TABELANUMEROS.PARAMBYNAME('USADO').ASSTRING:= 'SIM';

    TABELANUMEROS.ExecSQL;

    TBLORCAMENTOS.FieldByName('NUMERO').ASSTRING:= DBNUMERO.TEXT;

    if DBPRONTO.Checked = True then

    begin

    LABELDOCUMENTOPRONTO.Caption:= 'DOCUMENTO PRONTO DIA: ' + DBDATAPRONTO.FIELD.TEXT;

    end;

    TBLORCAMENTOS.POST;

    LABELDOCUMENTOPAGO.Visible:= FALSE;

    LABELDOCUMENTOPRONTO.VISIBLE:= FALSE;

    BTNFECHAR.Enabled:= TRUE;

    END

    ELSE

    TBLORCAMENTOS.Cancel;

    TABELALOJA.SQL.CLEAR;

    TABELALOJA.SQL.ADD('SELECT * FROM LOJAS');

    TABELALOJA.ExecSQL;

    TABELALOJA.Open;

    while NOT TABELALOJA.Eof do

    BEGIN

    DBLOJA.Items.ADD(TABELALOJA.FIELDBYNAME('LOJA').ASSTRING);

    TABELALOJA.Next;

    END;

    FORMORCAMENTOS.FormActivate(SELF);

    TABELAORCAMENTOS.Close;

    TABELAORCAMENTOS.Open;

    DBOBSERVACOES.ReadOnly:= TRUE;

    end;

    anteriormente a esse codigo eu tenho o incluir que esta assim:

    PROCEDURE TFORMORCAMENTOS.BTNINCLUIRClick(Sender: TObject);

    begin

    TBLORCAMENTOS.OPEN;

    TABELAORCAMENTOS.SQL.CLEAR;

    TABELAORCAMENTOS.SQL.Add('SELECT * FROM ORCAMENTOS WHERE CODIGO IN (SELECT MAX(CODIGO)AS CODIGO FROM ORCAMENTOS)ORDER BY CODIGO DESC');

    TBLORCAMENTOS.APPEND;

    TBLORCAMENTOS.ClearFields;

    DBCODIGO.TEXT :=INTtOSTR(TABELAORCAMENTOS.FIELDBYNAME('CODIGO').ASINTEGER + 1);

    DBDATA.TEXT:=DATA;

    FORMORCAMENTOS.FormActivate(SELF);

    WITH FORMORCAMENTOS DO

    BEGIN

    DBNUMERO.ENABLED:= TRUE;

    CAPTION:= 'INCLUSÃO DE REGISTRO' ;

    BTNEDITAR.ENABLED:= FALSE;

    BTNEXCLUIR.ENABLED:= FALSE;

    BTNINCLUIR.ENABLED:=FALSE;

    BTNFECHAR.ENABLED:= FALSE;

    DBOBSERVACOES.ReadOnly:= FALSE;

    END;

    DBNUMERO.SetFocus;

    LABELDOCUMENTOPAGO.Visible:= FALSE;

    DBPRONTO.CHECKED:= FALSE;

    DBPAGO1.CHECKED:=FALSE;

    DBPAGO2.CHECKED:=FALSE;

    DBPAGO3.CHECKED:=FALSE;

    TABELAITENSORCAMENTO.SQL.CLEAR;

    TABELAITENSORCAMENTO.SQL.ADD('SELECT * FROM ITENSORCAMENTO WHERE CODIGOREF =:CODIGOREF ORDER BY CODIGOITENS ASC');

    TABELAITENSORCAMENTO.ParamByName('CODIGOREF').ASSTRING:= DBNUMERO.TEXT;

    TABELAITENSORCAMENTO.EXECSQL;

    TABELAITENSORCAMENTO.OPEN;

    ORCEXCLUSAO:= DBNUMERO.TEXT;

    DBOBSERVACOES.Text:= TABELADATA.FieldByName('DATA').ASSTRING;

    end;

×
×
  • Criar Novo...