
Xistyle
Membros-
Total de itens
355 -
Registro em
-
Última visita
Tudo que Xistyle postou
-
Não funcionou :/ Que tipo de parâmetro poderia ser perdido?
-
O código é bem grande kuroi. Mas é isso mesmo que você disse: eu tenho um form chamado frmParametro. Esse form possui uma spread. A spread pode ser alimentada com parâmetros de vários tipos: datas, textos, números, etc. Quando trata-se de texto, vem o problema: o texto pode ser uma consulta normal (ex.: cliente = José) ou multi-seleção por checks (ex.: status = Ativos, Suspenso). Dependendo da consulta, um form é aberto por meio do botão que é clicado na grid da frmParametro: frmConsultaMultiSelecao e frmConsultaNormal. Todo o código está feito de forma a carregar os dados desses forms de consulta para o frmParametro (porque a frmParametro foi baseada numa tela de mesmo funcionamento). O problema é que, ao selecionar os dados que quero desses forms de consulta, o form da Unload e esses dados são passados para o frmParametro. Debugando todo o processo, a spread é alimentada normalmente. Se eu apenas deixar em execução, a linha da spread some! Fiz o teste já no Immediate para retornar o total de linhas da spread e ela desconsidera essa linha que foi inserida, como se nunca tivesse existido. Porém, no form que foi baseado essa tela funciona perfeitamente. A diferença é que no outro form já está definido o número de linhas da spread. No frmParametro é possível adicionar e remover linhas, não tendo então um número exato de parâmetros. A frmParametro abre em Modal e as Consultas também.
-
(RESOLVIDO)Salvar dados de chave estrangeira no bd
pergunta respondeu ao Fabin de Xistyle em Visual Basic
Sim entendi. Neste caso, a melhor opção é usar uma Matriz. Por exemplo: Matriz(1,1) - Recebe a ID da instituição que está no primeiro índice do combobox Matriz(1,2) - Recebe a ID da instituição que está no segundo índice do combobox ... e assim sucessivamente Matriz(2,1) - Recebe a ID do curso que está no primeiro índice do combobox Matriz(2,2) - Recebe a ID do curso que está no segundo índice do combobox ... e assim sucessivamente. Assim, quando o usuário escolher o curso, por exemplo, você já terá na variável o valor da ID dele. Aí basta fazer o INSERT/UPDATE usando essa variável ;) -
(RESOLVIDO)Salvar dados de chave estrangeira no bd
pergunta respondeu ao Fabin de Xistyle em Visual Basic
Não ficou muito claro Fabin... Passe os nomes dos campos da tabela pra ajudar ;) -
Bom dia! Estou trabalhando com a grid Spread e surgiram alguns problemas. Basicamente o mesmo mas de formas diferentes. Estou fazendo uma consulta, a partir da grid. A idéia é a seguinte: a grid contém um botão, que chamará um outro form (form de consulta normal ou form de consulta com checks para multi-seleção). A chamada está OK. Seleciono os dados ou digito e retorna os dados normalmente. Porém, ao clicar nos dados que quero, eles deveriam aparecer no form em background, que fez a chamada a esses forms de consulta. O problema é que, ao clicar para que eles apareçam nesse form, a linha em questão (que cliquei para chamar o form de consulta) some. Estranho que, se eu fizer o processo todo debugando, dá certo. Alguém tem uma idéia do que possa ser? Se precisarem de mais informações ou estiver confuso, estou full time aqui. Abraços!
-
ActiveX component can't create object or return reference to this
pergunta respondeu ao Tadeu Soga de Xistyle em Visual Basic
Xiii... sua máquina tá na rede? O caminho é este mesmo? -
Lameira você pode usar um evento: tipo ao pressionar ENTER, confirmando a alteração do item da nota é realizado o update no banco, que ficaria da forma que o kuroi passou: UPDATE iow SET codite = '" & NovoCodigoItem & "', codpro = '" & NovoCodigoProduto & "', qntpro = '" & NovaQuantidadeProduto & '" WHERE numos = '" & NumeroOS & '" Isso é apenas um exemplo, levando em consideração que o campo numos é a chave primária da tabela iow. Caso não possua, sugiro fortemente que crie uma ;)
-
Lucas, beleza? Não dá pra usar um For que percorre as linhas da grid, armazenando os valores em uma variável e depois apresentando-a num TextBox? Tipo: FOR i = 1 To MaxRows (a quantidade de linhas da grid) SomaValores = SomaValores + ValorDaLinhaAtual NEXT TextBox.Text = CStr(SomaValores)
-
:lol: verdade ;x /mode shame on ;x Obrigado kuroi!
-
Não abriu a imagem Jhowcs ;x Qual a chave primária da tabela?
-
Boa tarde pessoal! Estou com uma dúvida meu chata :/ Pesquisei, fui atrás de algumas fontes mas não encontrei nada similar. Bom, preciso realizar um teste para saber em qual componente estava o foco quando eu realizar determinado evento. Exemplicando, para ficar mais fácil: - O projeto está trabalhando com um form de pesquisa único, que recebe os parâmetros das demais telas para realizar o cadastro. - Cada form possui, pelo menos, um textbox "especial" (Código), que realiza uma validação da informação digitada. Exemplo: se eu digitar o código 3 para um formulário de Produtos, será feita uma pesquisa no banco de dados, procurando por esse produto de código 3. Caso não encontre o produto ou o textbox esteja em branco (Empty), limpa a tela, permitindo a inclusão de um novo produto. - Ocorre que existem forms que possuem mais de um textbox de Código (que preciso buscar as informações de outras tabelas que se relacionam com a tabela do form que está sendo usado). Sendo assim, precisaria saber em qual componente estava o foco quando eu realizar determinado evento. Supondo que, ao pressionar F4, seja chamada a rotina de pesquisa. Preciso verificar se o foco estava no textbox do Código do Produto ou no Código do Fornecedor. Alguma sugestão? Tentei realizar o teste abaixo, mas não há lógica. O VB não tem como adivinhar qual é o componente. For Each ctComponente In Me.Controls If ctComponente.Name = "txtCodigo" Then Call frmPesquisa.pcPesquisar("produto", "pro_id_int AS ID, pro_codigo_str AS Codigo, pro_nome_str AS Nome", "Produto", "txtCodigo") Exit For ElseIf ctComponente.Name = "txtCodigoFornecedor" Then Call frmPesquisa.pcPesquisar("fornecedor", "for_id_int AS ID, for_codigo_str AS Codigo, for_nome_str AS Nome", "Produto", "txtCodigoFornecedor") Exit For End If Next Se tiverem sugestões de como devo realizar essa verificação, de uma outra forma, fiquem a vontade :lol: Abraços!
-
MrJunior, normalmente a Spread possui, em sua pasta raiz, uma Pasta de Samples, contendo dicas muito boas de formatação de grid e usos em geral. Caminho seria algo mais ou menos como este: \Spread\Samples\ActiveX\VB6\Demo Overview Aí basta abrir o projeto e dar uma olhada no fonte. Exemplo de coluna com checkbox With grdSpread .Col = 5 'Defino que a coluna 5 (começando de zero) .Row = 0 'Aponto também para a linha zero (cabeçalho) .Text = " " 'e digito seu texto de cabeçalho, neste caso vazio .ColWidth(5) = 1.5 'Aponto para a coluna 5 (em parênteses) e defino sua largura .CellType = CellTypeCheckBox 'Defino o tipo de informação dessa coluna, neste caso check box End With Clique com o botão direito na Spread e verifique a aplicação Spread Designer. Existem várias configurações para a Spread.
-
kuroi, muito obrigado pela ajuda! Funcionou sim! Vou testar para os demais forms. Não preciso me preocupar com o form já aberto, pois montei uma rotina que não abre duas vezes o mesmo form. Segue o código abaixo para os interessados, achei muito interessante: Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Public Function fcVerificaFormAberto(sNomeForm As String) As Boolean Dim iCont As Integer Dim lJanela As Long sNomeForm = UCase(sNomeForm) fcVerificaFormAberto = False For iCont = 0 To Forms.Count - 1 'Verifica se o nome do formulário em questão já foi instanciado pelo projeto If UCase(Forms(iCont).Name) = sNomeForm Then fcVerificaFormAberto = True iFormAberto = iCont lJanela = FindWindow(vbNullString, Forms(iCont).Caption) 'Verifica se a janela está minimizada If IsIconic(lJanela) Then ShowWindow lJanela, 9 'Maximiza SetForegroundWindow lJanela 'Sobrepõe sobre as outras Else SetForegroundWindow lJanela 'Sobrepõe sobre as outras End If End If Next End Function Onde: sNomeForm é passada por parâmetro pelo menu que chama a tela. iFormAberto é uma variável global usada somente para receber o índice do form aberto no projeto. Abaixo o teste para o Menu: If fcVerificaFormAberto(sTela) = False Then Set oTela = Forms.Add(sTela) If sPermiteAbertura = "S" Then oTela.Show Set oTela = Nothing Else 'Ao passar pela rotina de forms abertos e verificar que o form não está, 'o índice do Forms está com a quantidade de telas abertas antes da tela em questão 'ser aberta, pois ela só é adicionada no Forms.Count quando passa pela linha 'Forms.Add(sTela). Assim, removi um índice a mais, ou seja, a tela que acabou de ser 'aberta. Unload Forms(iFormAberto + 1) End If End If Onde: oTela é uma variável do tipo Form sPermiteAbertura é uma variável global usada nesse teste e em uma rotina de direitos de acesso. Muito obrigado pela colaboração!
-
kuroi, boa noite! Não consegui utilizar de acordo com o último código informado. O VB6 instancia um novo form na memória, não Show. Gostaria de passar esse código, pego na grid, para o form que está em background. Não entendi também a forma que você utiliza, visto que usa da mesma forma como eu. Eu chamo a Pesquisa a partir de uma toolbar. A toolbar abre esse form de Pesquisa passando por parâmetro os campos que devem ser pesquisados para carregar na grid. Aí a dificulade para carregar essa informação ao clicar duas vezes na grid ;/
-
Posta pra gente o erro que está acontecendo durante o registro da DLL no WS2003.
-
Nossa escrevi um monte de coisa, mas a Net caiu e o post se perdeu... vamos ver se consigo passar a mesma idéia. Estou utilizando um processinho de direitos de acesso para um projeto. Usei as seguintes idéias: - Existe um form de cadastro de usuário, com sua respectiva tabela. - Existe um form de cadastro de grupo de usuários, com sua respectiva tabela. - Existe um form que realiza o vínculo dos usuários com um grupo de usuário, sendo que cada usuário pode fazer parte apenas de um grupo de usuários. - Existe um form que carrega um grupo de usuário e, em outra aba (ou guia) do SSTab, faz o esquema de direitos de acesso. Nesta aba estão listadas em um ListBox todas as telas do sistema. Outro ListBox receberá apenas as telas selecionadas. Neste ListBox é feita uma verificação de algumas telas, que define que deveriam ter algumas abas limitadas à acesso. Criei uma tabela de direitos de acesso que recebe a FK do grupo de usuários, um campo com as telas que aquele grupo tem acesso (separadas por ponto e vírgula) e um campo com as tabs, no mesmo padrão do campo telas. Sendo assim, também criei uma function pública que faz um select nessa tabela, pelo grupo de usuários. Durante o Load da tela, é verificada a permissão. A variável sPermiteAbertura é global. Private Sub Form_Load() Dim sDireitoAcesso() As String tabOrdemServico.TabEnabled(1) = False 'Chama a função de direito de acesso e verifica se o usuário tem permissão sDireitoAcesso = Split(pcVerificaDireitoAcesso, ",") 'Primeiro parâmetro: A tela que está sendo carregada está entre as retornadas 'pela função? If InStr(1, sDireitoAcesso(0), "OrdemServico") = 0 Then MsgBox "Você não possui permissão para acessar esta tela!", vbOKOnly + vbCritical, "KZX Auto System" Form_Unload 0 sPermiteAbertura = "N" Exit Sub Else 'Segundo parâmetro: se a tela estiver E tiver permissões por guias, 'faz esta verificação If Trim(sDireitoAcesso(1)) <> "" Then If InStr(1, sDireitoAcesso(1), "Cadastro de OS") > 0 Then tabOrdemServico.TabEnabled(1) = True End If End If sPermiteAbertura = "S" End If O menu utiliza a seguinte estrutura: If sPermiteAbertura = "S" Then oTela.Show Set oTela = Nothing Else Unload Forms(iFormAberto + 1) End If PS: o antes deste teste, fiz uma verificação de formulário já aberto. A variável iFormAberto também é uma variável global que recebe o índice do Forms. Espero ter ajudado :closedeyes:
-
Spessoto, nesse caso terias que criar uma OCX (componente) mesmo. Não manjo de criação de OCXs (já tentei mas não entra na cabeça :x), mas sei que deverá criar propriedades do tipo: NomeDasColunas (com separação por ponto e vírgula por exemplo). Assim, quando o cliente for configurar sua grid, ele colocará os nomes das colunas na propridade, como se fosse uma propriedade Caption ou outra qualquer. Terá que usar os Get e Set da vida (senão me engano). :rolleyes:
-
Opa desculpa pessoal... é que tava com um pouco de pressa para entregar esse módulo. Mas foi essa solução mesmo que usei kuroi, por Unload Forms(IndexDoForm) Não sei se é porque não sei manipular muito bem os forms com VB6, mas acho bem complicado trabalhar com forms. Por exemplo: no projeto que estou trabalhando, o esquema de pesquisa (consulta) para as telas é unificado. Por exemplo: existe uma tela onde é realizado o cadastramento de filiais. Nesse form, são realizados Insert, Update e Delete. Existe um TextBox, com nome padrão txtCodigo, que possui um evento Validate. Nesse evento, ele verifica se o código digitado da filial existe no BD e, se existir, carrega os campos do form. Mas fica complicado para saber qual o último código existente, sem ter uma consulta. Sendo assim, existe uma tela única de consulta para todos os forms do sistema. Problemas: A tela de Pesquisa realiza a busca correta dos itens, carregando-os numa grid. O usuário tem a opção de pesquisar por um trecho de nome ou código da tela que está pesquisando. O problema está na hora de carregar os dados na tela. Imagine a seguinte situação: abri a tela de Filial e cliquei na consulta. Tela de Filial em background e Pesquisa em foco. Quando clico duas vezes na grid, como faço para passar esse código da filial para o form de Filial já aberto? Se usar os códigos abaixo, não funcionam (uso uma grid chamada Spread 6.0) Dim frm AS Form Set frm = frmFilial frm.txtCodigo.Text = grdPesquisa.GetText Col, Row, vCodigo Call frm.txtCodigo_Validate(False) Se utilizar um comando como esse, o VB6 cria um novo frmFilial na memória e passa essas informações à esse form, que ainda não foi aberto (sem Show). O frmFilial em background continua com o txtCodigo em branco. Alguma sugestão? Abraços e mais uma vez desculpe!
-
Por favor, poderiam fechar o tópico? Encontrei o que precisava. Obrigado!
-
Pessoal, boa noite! Por favor, alguém poderia me auxiliar na seguinte questão: Estou trabalhando com direitos de acesso em meu projeto. Consegui manipular corretamente as permissões mas estou com problemas numa rotina de verificação de formulários abertos. Bom vamos para a parte mais técnica... Meu menu está em um TreeView. Achei interessante antes de abrir um form, verificar se o mesmo já está aberto, negando a abertura de um novo form. Assim, criei uma function que utiliza a propriedade Forms, percorrendo todos os forms abertos pelo projeto. Public Function fcVerificaFormAberto(sNomeForm As String) As Boolean Dim iCont As Integer sNomeForm = UCase(sNomeForm) fcVerificaFormAberto = False For iCont = 0 To Forms.Count - 1 If UCase(Forms(iCont).Name) = sNomeForm Then fcVerificaFormAberto = True iFormAberto = iCont Exit Function End If Next End Function A partir daqui o menu permitirá a abertura do form, caso a função retorne False. Ao retornar False, a rotina de abertura de formulários realiza o seguinte processo: If fcVerificaFormAberto(sTela) = False Then Set oTela = Forms.Add(sTela) If sPermiteAbertura = "S" Then oTela.Show End If End If Sendo sPermiteAbertura uma variável global que está no Load de cada form que será aberto, fazendo a verificação dos direitos de acesso. Meu problema está no código Set oTela = Forms.Add(sTela), pois quando o usuário não tem permissão para acessar a tela, o form é adicionado ao projeto, mesmo não estando aberto. Com isso, não consigo abrí-lo, mesmo que configure os direitos de acesso. Apenas conseguirei acessar se fechar o sistema. Existe algum comando contrário ao Forms.Add, tipo um Forms.Remove onde eu possa passar um índice e remover esse form não aberto da memória? Abraços
-
Mas isso não seria um problema relacionado à string SQL e sim ao auto-incremento. Qual o sistema gerenciador de banco de dados que tu utiliza ?
-
Pelo que entendi, o que você gostaria de fazer seria agrupar os dados do funcionario em uma única linha, independemente da quantidade de beneficioID que ele possua ?
-
Acredito que queira distinguir apenas alguns campos em uma consulta. Para isso, defina quais os campos que serão utilizados no DISTINCT. Exemplo: SELECT DISTINT (Fun_Nome, Fun_Codigo), Fun_Beneficio Utilizando o comando acima, você distinguirá apenas os campos fun_nome e fun_codigo, trazendo os benefícios repetidos. Com esta cláusula, os campos fun_nome e fun_codigo serão apresentados na consulta. Se utilizar a cláusula SELECT DISTINT ON (Fun_Nome, Fun_Codigo) Fun_Beneficio a distinção será a mesma, porém os campos fun_nome e fun_codigo não serão apresentados na consulta. Espero que tenha ajudado. Abraços
-
Pessoal, boa noite! Tudo bem ? Estava pensando em montar um servidor e um cliente IRC em Delphi 7, apenas para aprendizado mesmo. A idéia é criar um projeto opensource, onde os interessados pudessem acessar e estudar o código quando desejarem (podemos postar uma aposta no Script Brasil). Sugiro que seja utilizada notação húngara para padronizar o código. Porém, antes de nos empolgarmos muito eis um problema: não existe muito material bom sobre IdIrcClient na internet. Pelo menos até onde achei, encontrei sites russos sobre o assunto. :/ <_< Se alguém souber onde encontrar material seria bem interessante. Bom os interessados postem suas idéias de como podemos organizar o projeto. Abraços!
-
Pessoal! Tudo bem ? Estou com uma dúvida relacionada ao pacote RxLib para Delphi 7. Estou criando um sistema e gostaria de realizar a seguinte operação: ao minimizar a janela principal (frmPrincipal), gostaria que ela fosse minimizada no tray (ao lado do relógio). O controle (para ativar ou desativar este recurso) é feito através de um Check Menu (que a propósito não consegui arrumar também). Realizei algumas pesquisas na internet, mas o conteúdo que encontro é relativo ao fechamento do form Principal e esconder o aplicativo no tray. Ou seja, ao fechar a janela, o aplicativo continua rodando e seu ícone vai para o tray. Porém, gostaria de manter o aplicativo rodando e escondê-lo na barra do tray, não sendo necessário assim que ele ocupe espaço na barra de tarefas. Se alguém tiver algum material ou link que possa me fornecer para realizar as pesquisas, ficarei grato. Se puderem ajudar quanto à ativação deste recurso com o menu também ficarei muito agradecido! Abraços ;D