Jump to content
Fórum Script Brasil

João Paulo Taraciuk

Membros
  • Content Count

    228
  • Joined

  • Last visited

Community Reputation

0 Neutro

1 Follower

About João Paulo Taraciuk

Contatos

Perfil

  • Gender
    Male
  • Location
    Paraná
  1. Olá Estou criando um aplicativo para reproduzir vídeos, então, tenho que colocar um panel e uma imagem no canto desse vídeo. Tentei com o mediaPlayer e com o WindowsMediaPlayer mas não consegui apresentar esse objeto quando o mesmo está em tela cheia. Com o MediaPlayer, não consegui fazer a imagem aparecer sobre o display do vídeo nem em tamanho normal. Tentei fazer dessa forma: MediaPlayer1.FileName := OpenDialog1.FileName; MediaPlayer1.Open; MediaPlayer1.Display := Panel1; MediaPlayer1.DisplayRect := Panel1.ClientRect; Image1.Parent := MediaPlayer1; Image1.Left := 10; Image1.Top := 10; Mas não aparece a imagem na frente do vídeo. Como eu poderia fazer para que essa imagem apareça, mesmo que eu coloque esse vídeo para ser mostrado em fullscreen, que no caso do TMediaPlayer, será feito redimensionando o form para FullScreen: Form1.BorderStyle := bsNone; Top := 0; Left := 0; Width := Screen.Width ; Height := Screen.Height; Panel1.Align := alClient; MediaPlayer1.DisplayRect := Panel1.ClientRect;
  2. Então, vou ter mesmo que abrir o array e salvar os TClientDataSet diretamente no disco, e depois ao ler essas informações, carregá-los 1 a 1 para montar o array novamente.
  3. A leitura estou fazendo da seguinte forma: procedure TForm2.LerDeArquivo; var objDado: TDados; Stream: TFileStream; TamanhoStream: Integer; cds1: TClientDataSet; begin Stream := TFileStream.Create('C:\SalvandoRecord.dat', fmOpenReadWrite); ocds1 := TClientDataSet.Create(nil); try TamanhoStream := (Stream.Size) div SizeOf(objDado); for TamanhoStream := 1 to TamanhoStream do begin objDado.Dados := TspClientDataSet.Create(nil); Stream.Position := (TamanhoStream - 1) * SizeOf(objDado); Stream.ReadBuffer(objDado, SizeOf(objDado)); cds1 := objDado.Dados; cds1.DataSet := cds1; edit1.Text := objDado.String; end; finally FreeAndNil(Stream); end; end; A minha intenção é gerar o arquivo com um executável, e ler o mesmo depois com outro aplicativo. Tentei ennviar no record um OleVariant ao invés do TClientDataSet, mas também não obtive sucesso. O que eu tenho,é um array de variants, onde na primeira posição, tenho vários OleVariants que correspondem a ClientDataSet.Data, e nas outras posições do Array, outras informações, como String, Integer. Mas, na tentativa de escrever o Array diretamente em disco, não obtive sucesso tbém. Se eu conseguisse salvar o OleVariant e depois ler esse OleVariant e jogar para o .Data do ClientDataSet, seria ótimo, mas não obtive sucesso.
  4. Como eu poderia fazer para salvar um record em disco, sendo que nesse record tem um dado que é do tipo TClientDataSet. Salva tranquilo, aí, se eu fechar o sistema e abrir novamente, ele não consegue ler: type TDados = record Dados: TClientDataSet; String: string; procedure TForm2.EscreverEmArquivo; var cds: TClientDataSet; oDados: TDados; Stream: TFileStream; begin cds.FieldDefs.Add('dado', ftstring, 10); cds.CreateDataSet; cds.Active := True; cds.Append; cds.FieldByName('dado').AsString := 'testando'; cds.Post; oDados.Dados := cds; oDados.sString := 'teste'; Stream := TFileStream.Create('C:\SalvandoRecord.dat', fmCreate); try Stream.Write(oDados, SizeOf(oDados)); finally FreeAndNil(Stream); end; end; Aí, quando eu tento ler esse arquivo, a informação que é String lê corretamente, mas a informação que é TClientDataSet não funciona. Como podera ser feito pra salvar esse record com o ClientDataSet e ler ele novamente?
  5. Olá A primeira coisa que eu tentaria, seria realizar esse procedimento diretamente no banco, da forma que está... somente adicionando os parametros. Que banco você está utilizando? Não está nem inserindo? Tenta Limpar o SQL da Query gravaitem.Close; gravaitem.SQL.Clear; Deveria estar utilizando também o QuotedStr em dados do tipo varchar: gravaitem.sql.add ('(' + QuotedStr(cmbcontrole.text) +', ' + QuotedStr(txtcodprod.text) + ', ' + StringReplace(txtPrecoCusto.Text, ',','.',[rfReplaceAll])); Tenta aí pra ver o resultado que lhe é apresentado.
  6. Olá O ideal é fazer uma tabela separada onde serão adicionadas as informações de senha, login, de repente níveis de acesso e na outra somente os dados cadastrais do usuário, porque senão, toda alteração que for feita numa tabela terá que ser replicada para a outra, tipo, muda a senha da tabela de cadastro, tem que alterar também na de senha e assim por diante. Mas, se você prefere fazer dessa maneira, pra diminuir o seu trabalho pode ser feito um Trigger, dá uma olhada nesse artigo: http://imasters.com.br/artigo/8123 Acredito que vai te ajudar, já que no Access você não encontra funcionalidades como triggers, Stored Procedures, Functions. Depois que você se habituar a trabalhar com MySQL ou outro SGBD parecido ou superior, nunca mais vai querer saber de Access....
  7. Como o Denis Courcy colocou, o AUTOINCREMENT sempre vai somar 1 ao último registro inserido. Para tentar contornar a sua necessidade você vai ter que tirar o AUTOINCREMENT do campo e criar uma função no banco para gerar os Id´s, função essa que iria lendo código a código a sua tabela até encontrar uma lacuna e aí jogar para o php. Mas, do meu ponto de vista, isso não fica bom, imagina que em determinado momento você vai ter um ID 1250 e alguém exclui o 0002, por ex. o próximo registro ao invés de ser 1251 seria 0002, então numa listagem que você poderia utilizar esse campo para ordenar, indexar,etc você terá que utilizar outro como datas ou strings que acarreta mais uso de hardware para retornar a consulta.
  8. Supondo que o registro ainda não exista na tabela ATIVOS, pode ser feito um INSERT de um SELECT, da seguinte forma: INSERT INTO ATIVA(Id, Nome) (SELECT Id, Nome FROM PENDENTE) Assim, você joga os dados que resultarem no SELECTda tabela PENDENTE para a tabela ATIVA, assim você pode filtrar os registros da maneira que precisar no SELECT. Agora, se o registro já existir na tabela ATIVA, você vai ter que fazer um UPDATE também coletando os dados do SELECT
  9. Vê se é isso que você precisa: SELECT usu_nome, SUM(ped_total_pedido) AS pedidos, (SUM(ped_total_pedido)/(SELECT SUM(ped_total_pedido) FROM PEDIDO WHERE ped_data BETWEEN '2010-10-01' AND '2010-10-31' )*100)AS Percentual FROM pedido WHERE ped_data BETWEEN '2010-10-01' AND '2010-10-31' GROUP BY usu_nome ORDER BY pedidos DESC
  10. Testa aê que esse select pode funcionar... SELECT Funcionario_Id, Count(*) FROM TABELA WHERE DATA IS NULL GROUP BY Funcionario_Id HAVING COUNT(*)>1
  11. Usando o IN você tem que ter especificar a coluna para esta comparação, por exemplo: select ca.`NOME_SEL_CANDIDATO`,ca.`RG_SEL_CANDIDATO` from sel_candidato ca, `sel_inscricao` i,`sel_boletos` b, `sel_classificados` c where ca.`RG_SEL_CANDIDATO` = i.`RG_CANDIDATO_SEL_INSCRICAO` and i.`ID_SEL_INSCRICAO` = b.`INSCRICAO_SEL_BOLETOS` and i.`ID_SEL_INSCRICAO` = c.`INSCRICAO_SEL_CLASSIFICADOS` and b.`STATUS_SEL_BOLETOS` = 'S' AND c.`INSCRICAO_SEL_CLASSIFICADOS` NOT IN (SELECT `INSCRICAO_SEL_CLASSIFICADOS` FROM `sel_classificados`) Poderia também utilizar o EXISTS, que imagino retornaria mais rapidamente os resultados, para usar o EXISTS você tem que ter um campo para comparação do subselect com o select.
  12. Bom, até fiz funcionar aqui, chamar outro exe. Mas, utilizando o Seven, ao invés de simplesmente abrir a outra janela, ele aparece uma mensagem dizendo que tem um programa tentando mostrar uma mensagem, se eu clico em exibir a mensagem, abre o exe que eu estiver chamando em outra janela, com bordas parecidas com as do win98. O que eu estou utilizando é assim: procedure TTesteServico.ServiceExecute(Sender: TService); const SecBetweenRuns = 10; var Count: Integer; begin Count := 0; while not Terminated do begin Inc(Count); if Count >= SecBetweenRuns then begin Count := 0; WinExec('calc.exe', SW_SHOW); end; Sleep(1000); ServiceThread.ProcessRequests(False); end; end; Ele até mostra a calculadora, mas não normalmente, como se esperaria. O que poderia ser feito nesse caso?
  13. Poderia tentar com o Application.MessageBox: if Application.MessageBox('Mensagem ', 'Caption', MB_ICONWARNING + MB_OKCANCEL + MB_DEFBUTTON2) = mrOk then ShowMessage('Clicou OK') else ShowMessage('Clicou Cancelar'); com o MB_DEFBUTTON2 o foco vai ficar no segundo botão, aí você pode trocar MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3 ou MB_DEFBUTTON4. e a Mensagem fica no idioma do windows diferente do MessageDlg que, por padrão fica em inglês se não traduzir a Consts.
  14. O problema pode estar no ORDER BY, tenta colocar: ORDER BY 3
  15. Pode ser feito por função, que seja executada juntamente com os procedimentos que você desejarm ou com trigger, que seja executada do banco.
×
×
  • Create New...