
Xistyle
Membros-
Total de itens
355 -
Registro em
-
Última visita
Tudo que Xistyle postou
-
Vai variar um pouco de acordo com a ferramenta que você vai usar como relatório (Crystal, ReportViewer, HTML, Excel...), mas basicamente você pode concatenar seus filtros numa string, realizar um SELECT no banco e atribuir a um DataSet/DataTable, que será passado como Source do seu relatório. Exemplo, de acordo com a sua situação acima: strSQL = "SELECT ... FROM .... WHERE " If DataInicial != Null And DataFinal != Null Then strSQL += " data BETWEEN '" + DataInicial "' AND '" + DataFinal + "'" End If ' Sendo 0 (zero) o índice de texto "Selecione a opção" If cmbEstadia.SelectedIndex > 0 Then strSQL += " AND estadia = '" + cmbEstadia.Text + "'" End If ...
-
Bom, tendo em vista que o que muda é o nome do banco, você pode criar uma string de conexão modelo, exemplo: ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\MEUDATABASE;Persist Security Info=False;"; Quando o usuário 'aaaa' logar no sistema, você vai substituir a sua string de conexão com o nome do banco de dados dele: if (user = "aaaa") { ConnectionString = ConnectionString.Replace("MEUDATABASE", "aaaaGestaoXXI.mdb"); } if (user = "bbbb") { ConnectionString = ConnectionString.Replace("MEUDATABASE", "bbbbGestaoXXI.mdb"); }
-
Você vai executar sua VIEW e atribuir o resultado dela num DataSet, que depois vai carregar um DropDownList (DDL). Quando o usuário clicar em um item do DDL, ai você gostaria que outros campos exibissem essas informações correspondentes, é isso?
-
Achei algumas referências sobre o RightToLeft mas parece que o pessoal muda a fonte para algum idioma árabe, o que permite essa escrita. Achei meio gambiarra mudar o idioma para árabe, digitar os valores e depois voltar para português. Tente procurar por um componente terceirizado (um Mask-não-Microsoft) que já faça isso.
-
Camarada, veja se esse link te ajuda (a idéia pelo menos - não precisa desenvolver toda a rotina) :) http://www.ecode10.com/artigo/502/DateDiff...+Sharp+NET.aspx
-
Renato, essa é uma função específica do VBA/VB. Veja se o comando abaixo tem uma funcionalidade semelhante: try { Globals.ThisAddIn.Application.ScreenUpdating = false; ... } ... finally { Globals.ThisAddIn.Application.ScreenUpdating = true; }
-
Felippe, poste sua dúvida no fórum de C++, local mais indicado para responderem sua pergunta.
-
Se você definir a opção RightToLeft não funciona?
-
Como você está executando o SELECT? Coloque seu código :)
-
Cara... dá pra fazer isso (com exceção da espiral entre os botões) facilmente. Mas ai você vai precisar usar uma outra tecnologia, chamada WPF. Ela vem integrada com o Visual Studio 2008 (framework 3.5+) e é uma linguagem baseada em XML para desenvolvimento de interfaces ricas. Você pode programar tanto em VB.NET quanto C#. Se achar interessante, veja esse site com vários exemplos simples: www.wpftutorial.net/
-
Cara, tenho um exemplo em VB.NET, que você passa o nome dos parâmetros no Crystal (@NOME, @ENDERECO...) e seus respectivos valores: Public Sub lsubCarregaRelatorio(ByVal lobjValorParametros() As Object, ByVal lstrNomeParametros() As String) Dim lrptRelatorio As New ReportDocument Dim lconInfo As New ConnectionInfo Dim ltblInfo As New TableLogOnInfo Dim lparParametro As ParameterFieldDefinition Dim lfilCampo As ParameterFieldDefinitions Dim ldisDiscrete As ParameterDiscreteValue Dim lvalValor As ParameterValues Dim lstrTexto As String '# Verifica o acesso ao arquivo .rpt If (System.IO.File.Exists("CaminhoRelatorios\NomeRelatorio) = False) Then MessageBox.Show("Não foi possível acessar o relatório." & vbCrLf & _ "Se o erro persistir, entre em contato com o Administrador.", "Sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If '# Passa os dados para conexão lconInfo.DatabaseName = "Banco" lconInfo.ServerName = "Servidor" lconInfo.UserID = "Usuario" lconInfo.Password = "Senha" '# Carrega o arquivo rpt lrptRelatorio.Load("CaminhoRelatorios\Relatorio.rpt") '# Realiza a conexão das tabelas do relatório For Each ltblTable As Table In lrptRelatorio.Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next '# Conexão das tabelas dos subrelatórios (CASO EXISTA) For lintContador = 1 To lrptRelatorio.Subreports.Count For Each ltblTable As Table In lrptRelatorio.Subreports(lintContador - 1).Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next Next '# Recebe os parâmetros existentes no rpt lfilCampo = lrptRelatorio.DataDefinition.ParameterFields '# Loop que irá configurar cada parâmetro For lintContador As Integer = 0 To UBound(lobjValorParametros) lparParametro = lfilCampo.Item(lstrNomeParametros(lintContador)) lvalValor = lparParametro.CurrentValues ldisDiscrete = New ParameterDiscreteValue '# Verifica o tipo de dado para passar o valor correto If IsDate(lobjValorParametros(lintContador)) Then ldisDiscrete.Value = IIf(lobjValorParametros(lintContador) = "00:00:00" Or lobjValorParametros(lintContador) = "0001-01-01 00:00:00", "1899-12-30", lobjValorParametros(lintContador)) ElseIf IsNumeric(lobjValorParametros(lintContador)) Then ldisDiscrete.Value = lobjValorParametros(lintContador) Else ldisDiscrete.Value = IIf(Trim(lobjValorParametros(lintContador)) = "NULL", DBNull.Value, Trim(lobjValorParametros(lintContador))) End If '# Adiciona e confirma os valores lvalValor.Add(ldisDiscrete) lparParametro.ApplyCurrentValues(lvalValor) Next '# crvVisualizador é meu objeto CrystalReportViewer crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh() End Sub Sendo que lobjValorParametros é um vetor contendo os valores dos parâmetros e lstrNomeParametros é um vetor contendo os nomes dos parâmetros, na mesma ordem do outro vetor. Por exemplo, se @IdFilial está na posição zero do lstrNomeParametros, 1 está na posição zero do vetor lobjValorParametros, correspondendo assim ao mesmo campo.
-
Cara, nunca passei por essa necessidade mas vou dar uma dica. Ao invés de ficar usando os eventos de mouse você pode tentar fazer o seguinte: identifique qual foi o nó filho clicado, por um tag ou name, e depois percorra (caso seja por tag) os filhos e defina o foco para ele.
-
Ahhh boa pergunta! :D Está dentro do padrão, ou seja, entre 95x95 pixels? Lembro que tive problema com avatar também, mas já faz muito tempo...
-
Veja se esse link traz alguma ajuda: http://www.ecode10.com/artigo/1129/ReportV...erando+PDF.aspx
-
Não entendi... Você quer um editor de XML ou você quer gerar um relatório no ReportViewer a partir de um XML?
-
As ferramentas mais fáceis de você integrar com o VB.Net, para relatórios, são o Crystal Reports e o ReportViewer (ambos já estão disponíveis em algumas versões do Visual Studio 2010). Porém, como normalmente os relatórios são exportados para Excel, você pode criar uma classe que formate uma planilha do Excel ou abra um modelo já existente e alimente essa planilha com os dados que precisa.
-
Bem vindo ao fórum Josma! Você pode fazer assim: lá no design do seu form, definir o seu combobox como Visible = False. Ou seja, quando abrir esse form, o combobox não vai estar visível ao usuário. Ai, quando o usuário clicar no botão desejado, você muda o valor de Visible para True, no evento de click, por exemplo: Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) ComboBox1.Visible = True End Sub
-
Cara, não vi seu tópico antes... Não entendi muito bem. Se você quer testar uma variável inteira, o VB possui uma função nativa chamada IsNumeric, que retorna True/False. Se você tiver o valor de entrada e retornar False nessa função, você executa o beep, por exemplo.
-
Acredito que o recurso de Group possa resolver seu problema. Você define para agrupar os dados por Funcionário e cria um subgrupo de Itens de Avaliação. Dê uma olhada nesse link: http://www.crystalreportsbook.com/Crystal_...XI.asp?Page=3_2
-
Você deve definir sua variável MeuNomeForm como instância do seu form. Dim MeuNomeForm As New Form1() AlterarDados(MeuNomeForm) ... Sub AlterarDados(ByVal MeuNomeForm As Form) MeuNomeForm.Button1.Text = "Novo nome do Botão" End Sub
-
Ficou complicada essa explicação... :) Quando algum usuário envia um e-mail pelo seu site, a mensagem vai direto pra seu e-mail do Hotmail? E quando você recebe essas mensagens, o Hotmail "bloqueia", dizendo que é Spam?
-
Como você está carregando a DataGridView? Se for por código, basta mudar seu SELECT: SELECT cli.nome, cli.endereco, cli.cep, cid.nome, cli.telefone FROM cliente AS cli INNER JOIN cidade AS cid ON cid.codigo = cli.codigo_cidade WHERE cli.nome = 'XISTYLE'
-
Veja se a tabela Resultado não existe no seu banco. Essa tabela deve ser temporária.
-
Hmm perai que tem um erro nesse SELECT. Esse GROUP acho que "confundiu" a pesquisa. Na primeira linha é possível ver que só existe o valor2 (110.345). No Total2 da linha 1, vê se o valor duplicado (220.690), sendo que deveria ser apenas (110.345 + 2.500). Não é uma boa dica, mas como não existem muitos registros, não irá impactar no desempenho (iria impactar acima de uns 200 mil registros). Tente usar um Union: SELECT data_declaracao, valor1, valor2, valor3, maior_valor_linha FROM #resultado UNION ALL SELECT '' AS data_declaracao, SUM(valor1) AS total1, SUM(valor2) AS total2, SUM(valor3) AS total3, '0' AS maior_valor_linha FROM #resultado Com relação a data, não tem como fazer isso a não ser testando. Você pode fazer isso durante a execução da sua SProcedure. Coloque o seguinte código no While, antes do "SET @registroAtual = ...": DECLARE @dataAtual AS DATETIME SET @dataAtual = (SELECT data_declaracao FROM #resultado WHERE id = @registroAtual) -- Se não existir, insere um registro vazio IF NOT EXISTS(SELECT id FROM #resultado WHERE data_declaracao = DATEADD(day, 1, @dataAtual)) INSERT INTO #resultado (data_declaracao, valor1, valor2, valor3, maior_valor_linha) VALUES (DATEADD(day, 1, @dataAtual), '0.0', '0.0', '0.0', '0.0') Como será inserida uma nova linha no final, com uma ID mais alta do que a que a data anterior, compensa você retornar o SELECT ordenando por data_declaracao. Exemplo: a linha 3 de ID 3 com data 04/10/11 gerou uma linha vazia 12 de ID 12 com data 05/10/11. Se ordernar por ID, essa data não aparecerá corretamente ordenada.
-
Paulo, chegou a trabalhar com tabelas temporárias? Acho que vai ser a melhor solução nesse seu caso. Você iria inserir os dados retornados do SELECT da sua SProcedure e depois tratá-los. Exemplo: USE [AUDITORIA] GO /****** Object: StoredProcedure [dbo].[Proc_Itens_Declaracao_RelatorioDeclaracao] Script Date: 11/01/2011 11:43:43 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Proc [dbo].[Proc_Itens_Declaracao_RelatorioDeclaracao] ( @Param_data_inicial Date, @Param_data_final Date, @Param_cod_loja Int, @Param_cod_tipo_declaracao01 Int , @Param_cod_tipo_declaracao02 Int, @Param_cod_tipo_declaracao03 Int) AS -- O # indica que é uma tabela temporária, excluida após o processamento da procedure. CREATE TABLE #resultado (id INT PRIMARY KEY IDENTITY(1,1), cod_loja INT, data_declaracao DATETIME, valor1 NUMERIC(10,2), --Ou outro tipo de dado que você já esteja usando pra valor valor2 NUMERIC(10,2), valor3 NUMERIC(10,2), maior_valor_linha NUMERIC(10,2)) INSERT INTO #resultado (cod_loja, data_declaracao, valor1, valor2, valor3) SELECT Loja.cod_loja, Declaracao.data_declaracao, SUM( (case when Declaracao.cod_tipo_declaracao in (@Param_cod_tipo_declaracao01) then Itens_Declaracao.valor else 0 end)) valor1, SUM( (case when Declaracao.cod_tipo_declaracao in (@Param_cod_tipo_declaracao02) then Itens_Declaracao.valor else 0 end)) valor2, SUM( (case when Declaracao.cod_tipo_declaracao in (@Param_cod_tipo_declaracao03) then Itens_Declaracao.valor else 0 end)) valor3 FROM Itens_Declaracao INNER JOIN Declaracao ON Declaracao.cod_declaracao = Itens_Declaracao.cod_declaracao INNER JOIN Loja ON Loja.cod_loja = Declaracao.cod_loja WHERE Declaracao.data_declaracao BETWEEN ('@Param_data_inicial') AND ('@Param_data_final') AND Declaracao.cod_loja = @Param_cod_loja AND Declaracao.cod_tipo_declaracao in (@Param_cod_tipo_declaracao01,@Param_cod_tipo_declaracao02, @Param_cod_tipo_declaracao03) GROUP BY Declaracao.data_declaracao, Loja.cod_loja -- Como criamos um campo ID pra nossa tabela temporária, vamos usar um While pra percorrer os registros dela DECLARE @registroAtual AS INT DECLARE @registroFinal AS INT DECLARE @valor1 AS INT DECLARE @valor2 AS INT DECLARE @valor3 AS INT SET @registroAtual = (SELECT MIN(id) FROM #resultado) SET @registroFinal = (SELECT MAX(id) FROM #resultado) WHILE @registroAtual <= @registroFinal BEGIN --Aqui existem várias formas de fazer as comparações. Vou usar uma mais "legível" e simples SET @valor1 = (SELECT valor1 FROM #resultado WHERE id = @registroAtual) SET @valor2 = (SELECT valor2 FROM #resultado WHERE id = @registroAtual) SET @valor3 = (SELECT valor3 FROM #resultado WHERE id = @registroAtual) IF @valor1 > @valor2 AND @valor1 > @valor3 UPDATE #resultado SET maior_valor_linha = @valor1 WHERE id = @registroAtual IF @valor2 > @valor1 AND @valor2 > @valor3 UPDATE #resultado SET maior_valor_linha = @valor2 WHERE id = @registroAtual IF @valor3 > @valor1 AND @valor3 > @valor2 UPDATE #resultado SET maior_valor_linha = @valor3 WHERE id = @registroAtual SET @registroAtual = (SELECT MIN(id) FROM #resultado WHERE id > @registroAtual) END -- Depois de percorrer todos os registros, basta exibir os dados SELECT data_declaracao, valor1, valor2, valor3, maior_valor_linha, SUM(valor1) AS Total1, --Totais dos valores SUM(valor2) AS Total2, SUM(valor3) AS Total3 FROM #resultado PS: não testei o código. Mas acho que deve funcionar :) Qualquer coisa posta ai!