![](https://forum.scriptbrasil.com.br/uploads/set_resources_1/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
MICHELI_MARTINS
-
Total de itens
84 -
Registro em
-
Última visita
Posts postados por MICHELI_MARTINS
-
-
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.
-
deu certo com 4 aspas simples.
obrigada.
-
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.
-
Deu certo!!!
agora tem como você me explicar a magica?
Obrigada viu?
-
p:= 'd:\sample.bmp';
SendMessage(CaptureWindow, WM_CAP_SAVEDIB, 0, longint(pansichar(p)));
tb não funcionou. não entendo porque ele interpreta diferente, afinal é o mesmo caminho de SendMessage(CaptureWindow, WM_CAP_SAVEDIB, 0, longint(pansichar('d:\sample.bmp')));
não queria ter que colocar fixo......
-
operador não se aplica a este tipo de operando
longint(PAnsichar(path) + PAnsichar('sample.bmp'))
-
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.
-
incompatible types integer and pwidechar.
-
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);
-
tb não grava. mais alguma sugestao?
-
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?
-
tem alguma propriedade do checkbox que já traga ele preenchido como N ou terei que inserir isso toda vez que fizer um registro novo?
-
jhonas bom dia.
No dbcheckbox no delphi coloquei ValueChecked = S, ValueUnchecked = N, e AllowGrayed =False.
E no banco sql server mudei o campo pago1 para char (1).
é isso mesmo? ainda esta trazendo sombreado.
-
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.
-
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?
-
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
-
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.
-
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.
-
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..
-
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?
-
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?
-
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;
-
Então... não da pra usar essa procedure no seu código porque ela é do QRPrev.pas do QuickReport 5.02, eu editei ela assim, se quiser o QuickReport 5.02, me passa pm que te mando o link :rolleyes:
Vlw
obrigado, ms meu quick aqui é 4.0 nem adintaria....ms valeu
-
douglas essa procedure pede eventhandled undeclared identifier.
o que fazer?
(Resolvido) Não foi possível localizar o ponto de entrada do procedime
em Delphi, Kylix
Postado
eu instalei um xp novinho tb, não resolveu....