Ir para conteúdo
Fórum Script Brasil

Xistyle

Membros
  • Total de itens

    355
  • Registro em

  • Última visita

Tudo que Xistyle postou

  1. Xistyle

    (Resolvido) Report Viewer

    Usando o Report Viewer, não sei lhe dizer. Uso o RV apenas para exibir um arquivo rpt, com os parâmetros que passo dinamicamente na aplicação. Pelo Crystal, no Field Explorer, existe um item chamado Group Name Fields. Clicando com o direito, aparece a opção Group Expert, que lista os campos das tabelas. Ai você definiria que gostaria de agrupar por cliente, por exemplo. Ele criará no design do relatório uma seção para cada cliente que será filtrado. Neste, você irá inserir os dados das tabelas de detalhes.
  2. Xistyle

    (Resolvido) Report Viewer

    Sissi, Pelo que entendi você teria que criar um Group por cliente (supondo que Maria seja um cliente). Tendo o vínculo entre a tabela de detalhe e a tabela de "detalhe do detalhe", você conseguiria apresentar os filhos e seus respectivos detalhes.
  3. Bruno, obrigado pelo exemplo, mas não deu certo. Não apresentou erro algum, contudo é solicitado os parâmetros de entrada da procedure, bem como o login/senha do banco. Infelizmente eu preciso executar essa procedure e armazená-la localmente, para passar para um datasource de report remoto. Usei o seguinte código teste: '# dsProdutividade é o DataSet físico que criei e apenas arrastei a procedure para ele Dim dsProdutividade As New dsProdutividade Dim dapSQL As SqlClient.SqlDataAdapter dapSQL = New SqlClient.SqlDataAdapter("EXEC PRC_REL_PRODUTIVIDADE NULL,NULL, NULL,NULL, NULL,NULL, NULL,NULL, 0", "Data Source=SERVIDOR;Initial Catalog=DATABASE;User Id=USER;Password=SENHA;") dapSQL.Fill(dsProdutividade, "RESULTADO") dapSQL.Dispose() lrptRelatorio.FileName = lstrCaminho & "\Relatorios\relProdutividade.rpt" lrptRelatorio.SetDataSource(dsProdutividade) crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh()
  4. Xistyle

    (Resolvido) Report Viewer

    Sissi, você precisa montar o relatório no Crystal. O Viewer apenas é um componente que auxiliará a visualização do retorno do relatório na sua aplicação.
  5. Alguma idéia do que pode estar errado Bruno? Retorna o erro: This field name is not known. Criei um item DataSet e dentro dele coloquei (pelo Designer) e configurei um DataAdapter, com a Stored Procedure. Esse DataSet chama-se dsProdutividade. Dim dsProdutividade As New dsProdutividadeTableAdapters.PRC_REL_PRODUTIVIDADETableAdapter Dim dtbProdutividade As New dsProdutividade.PRC_REL_PRODUTIVIDADEDataTable Dim DTB As New DataTable dsProdutividade.Connection.ConnectionString = "Data Source=SERVER;Initial Catalog=DATABASE;User Id=USER;Password=PASSWORD;" dsProdutividade.Fill(dtbProdutividade, CDate(mdatSolicitacaoInicial), _ CDate(mdatSolicitacaoFinal), _ CDate(mdatConclusaoInicial), _ CDate(mdatConclusaoFinal), _ CInt(mlngIDTipoDiligencia), _ CInt(mlngIDStatusDiligencia), _ CStr(mstrCelula), _ CStr(mstrComarca), _ CInt(mintOpcaoDiligencia)) DTB = dtbProdutividade lrptRelatorio.Load(lstrCaminho + "Relatorios\relProdutividade.rpt") lrptRelatorio.SetDataSource(DTB) crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh()
  6. Bruno, boa tarde! Mas de que forma o dataset tipado vai me ajudar, evitando a passagem de parâmetros de entrada da stored procedure para o Crystal?
  7. Xistyle

    ASP.NET

    Camarada, - Como Programar com ASP.Net e C# - Alfredo Lotar, editora Novatec (para iniciantes) - ASP.NET - Como Programar - Deitel - Makron Books :)
  8. Tiago, boa tarde! O ReportViewer nada mais é do que uma ferramenta que o auxiliará a carregar um relatório do Crystal já existente. Normalmente é usado o seguinte código abaixo (bem simples, apenas para ilustrar a situação - em VB.NET): Imports CrystalDecisions.Shared Imports CrystalDecisions.CrystalReports.Engine Dim rptRelatorio As ReportDocument '# Sendo crvVisualizador o nome do meu ReportViewer rptRelatorio.Load("CAMINHO_DO_RELATORIO.RPT") crvVisualizador.ReportSource = rptRelatorio crvVisualizador.Refresh() Lembrando que a complexidade disso pode aumentar, de acordo com cada relatório. Por exemplo, se o relatório usar uma Stored Procedure, será necessário passar os parâmetros, que pode ser dinamicamente ou fixos no código. Para isso, é bom pesquisar sobre os seguintes itens no Google: - ParameterValues - ParameterFieldDefinition - ParameterFieldDefinitions - ParameterDiscreteValue - ConnectionInfo - TableLogOnInfo Espero tê-lo ajudado!
  9. Pessoal, boa tarde! Tenho uma dúvida chata com o Crystal. Eu e ele não nos damos muito bem, pra falar a verdade... Tenho uma aplicação que realiza dois tipos de pesquisa: local e remota via webservice. Tenho um relatório que está funcional quando a pesquisa é feita localmente: passo os parâmetros dinamicamente em tempo de execução e tá chique! O problema ocorre quando vou gerá-lo remotamente pelo webservice. Decidi executar a procedure e armazenar o retorno dela em um data table. Passo esse data table para o data source do relatório e vinculo o relatório ao Crystal Viewer. Contudo, ocorre que o relatório ou dá um erro (informando que um campo é inválido) ou são solicitados os parâmetros de entrada da procedure. Alguém sabe de alguma forma de eu definir que o data source é uma stored procedure já "retornada" (com o select final), evitando a solicitação dos parâmetros? Segue um código que usei para testes: Dim lrptRelatorio As New ReportDocument Dim cnn As New SqlClient.SqlConnection("Data Source=SERVER;Initial Catalog=BASE;User Id=USER;Password=SENHA;") Dim dtb As New DataTable Dim exec As New SqlClient.SqlCommand("PRC_REL_PRODUTIVIDADE", cnn) Dim DTA As New SqlClient.SqlDataAdapter exec.CommandType = CommandType.StoredProcedure exec.Parameters.AddWithValue("@I_DTSOLICITACAOINICIAL", IIf(mdatSolicitacaoInicial = "00:00:00" Or mdatSolicitacaoInicial = "0001-01-01 00:00:00", DBNull.Value, CDate(mdatSolicitacaoInicial))) exec.Parameters.AddWithValue("@I_DTSOLICITACAOFINAL", IIf(mdatSolicitacaoFinal = "00:00:00" Or mdatSolicitacaoFinal = "0001-01-01 00:00:00", DBNull.Value, CDate(mdatSolicitacaoFinal))) exec.Parameters.AddWithValue("@I_DTCONCLUSAOINICIAL", IIf(mdatConclusaoInicial = "00:00:00" Or mdatConclusaoInicial = "0001-01-01 00:00:00", DBNull.Value, CDate(mdatConclusaoInicial))) exec.Parameters.AddWithValue("@I_DTCONCLUSAOFINAL", IIf(mdatConclusaoFinal = "00:00:00" Or mdatConclusaoFinal = "0001-01-01 00:00:00", DBNull.Value, CDate(mdatConclusaoFinal))) exec.Parameters.AddWithValue("@I_IDTIPODILIGENCIA", mlngIDTipoDiligencia) exec.Parameters.AddWithValue("@I_IDSTATUSDILIGENCIA", mlngIDStatusDiligencia) exec.Parameters.AddWithValue("@I_CELULA", IIf(Trim(mstrCelula) = "", DBNull.Value, mstrCelula)) exec.Parameters.AddWithValue("@I_COMARCA", IIf(Trim(mstrComarca) = "", DBNull.Value, mstrComarca)) exec.Parameters.AddWithValue("@I_OPCAODILIGENCIA", mintOpcaoDiligencia) cnn.Open() DTA.SelectCommand = exec DTA.Fill(dtb) lrptRelatorio.Load(lstrCaminho + "Relatorios\relProdutividade.rpt") lrptRelatorio.SetDataSource(dtb) crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh()
  10. Orlando, obrigado pela resposta. Infelizmente não retornou o que preciso, mas achei uma forma paleativa. Fiz o seguinte: Try ... Catch ex As Exception Throw New Exception("Ocorreu um erro durante o processamento - rotina PRC_PROCESSAR: " & ex.Message & ex.StackTrace) End Try No ex.StackTrace é retornado onde ocorreu o evento (exemplo: botaoProcessar_Click) além de informar a linha onde ocorreu o erro. Isso facilita bastante para identificar no código qual é a variável, sendo que o ex.Message já passa o valor da variável.
  11. Dia pessoal! Preciso de uma ajuda com relação ao Throw. Eu trabalho com um form e faço a chamada de um segundo form, passando alguns parâmetros. Ao abrir esse segundo form chamado, ocorre um runtime error. Eu uso o Throw pra passar o erro para a camada superior, ou seja, o primeiro form. Porém, gostaria se tem como saber se consigo mandar para a camada superior a variável e valor dela no throw genérico. Try ... Catch ex As Exception Throw New Exception("Ocorreu um erro durante o processamento - rotina PRC_PROCESSAR: " & ex.Message) End Try Consigo passar nesse catch genérico qual variável/valor apresentou problema?
  12. Achei alguns materiais na web, mas todos são apenas para transferência de arquivos pequenos. Percebi também que esses métodos (MTOM e DIME) são para versões anteriores ao VS2008, o que não compensa pro que preciso fazer. Nenhum sugestão?
  13. Olá amigos! Tudo bem? Preciso de algumas dicas e como sempre me ajudam, quem sabe não podem quebrar mais uma vez um galho! Não manjo nada de web e preciso utilizar alguns recursos para um novo projeto. Montamos um web service e preciso criar dois métodos, se possível, seguros e rápidos para trabalhar com transferência de arquivos. O fluxo de transferências é grande, portanto não sonho em obter um grande desempenho nesse requisito. Mas gostaria de manter a integridade dos dados e evitar perdas nos processos de transferência. Andei pesquisando e encontrei um método chamado MTOM que, pelas pesquisas que fiz, é bem seguro e manter a integridade dos dados. Binariza os arquivos e realiza uma compressão nos dados, diminuindo o tamanho da mensagem que será transferida. Alguém manja desse método? Alguém que trabalha ou conhece esse assunto (transferência de arquivos via web service) pode dar algumas dicas (até mesmo sobre outras formas de fazer)? Se tiverem alguns links com samples, fico grato também, pois tive certa dificuldade de encontrar (principalmente upload). Segue um link de MTOM para download que encontrei: http://msdn.microsoft.com/en-us/library/aa529283.aspx Abraços!
  14. fulvio, obrigado pela resposta. Consegui achar a solução que havia usado, a um mês atrás: (SELECT RAZAOSOCIAL FROM (SELECT ROW_NUMBER() OVER(ORDER BY PAR.IDADV_PARTE ASC) AS ROWNR, TER.RAZAOSOCIAL AS RAZAOSOCIAL FROM PARTE PAR WITH (NOLOCK) INNER JOIN TERCEIROSX TER WITH (NOLOCK) ON TER.NTERC = PAR.NTERC WHERE PAR.ID = PRC.ID AND PAR.IDADV_PARTETIPO = 1) VW WHERE ROWNR = 1) AS PARTE_INT1 O desempenho foi muito bom, visto que criei uma function pra retornar esses dados (8260 registros) e levou cerca de 1h 30. Com essa subquery acima, levou IMENSOS 59 segundos. Obrigado de qualquer forma e creio que seja interessante esse recurso para outros usuários. EDIT: apenas complementando: acredito que deu certo desta forma, porque a forma de retorno da VIEW é diferente. A view retorna a massa de dados, não sendo possível filtrar pela linha corretamente. Transformando esse subquery, acredito que o SQL consiga trabalhar com o retorno da forma que eu precisava.
  15. E ai pessoal? Tudo bem? Gostaria de saber se alguém pode me ajudar com o código abaixo. Vou explicar: eu preciso listar, na mesma linha de registros, várias informações que normalmente sairiam como linhas, em colunas. Por exemplo: ID NOME 15 LEONARDO 1659 RAFAEL 15984 DONATELLO 54216 MICHELANGELO Tenho um select beeeem grande que precisaria retornar, na linha, essas colunas (apenas o nome), como o exemplo abaixo: IDSERVICO NOME1 NOME2 NOME3 NOME4 45 LEONARDO RAFAEL DONATELLO MICHELANGELO Se fosse no PostgreSQL, eu faria subqueries usando LIMIT (TOP) e OFFSET e encaixaria como uma luva. Mas o SQL Server não tem esse recurso, então tive que apelar para um workaround :x Estou realizando a seguinte subquery, 6 vezes: (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 1) (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 2) (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 3) (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 4) (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 5) (SELECT TOP 1 RAZAOSOCIAL FROM VW_PARTES WHERE ID = PRC.ID AND ROWNR = 6) Sendo que PRC.ID é uma tabela que está fora das subqueries, realizando o vínculo entre os registros. Essa view tem o seguinte código: SELECT ROWNR, RAZAOSOCIAL, ID FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY PRC.ID ORDER BY PAR.ID_PARTE ASC) AS ROWNR, TER.NOME, PAR.ID FROM PARTES PAR WITH (NOLOCK) INNER JOIN TERCEIROSX TER WITH (NOLOCK) ON TER.NTERC = PAR.NTERC INNER JOIN PRINCIPAL PRC WITH (NOLOCK) ON PAR.ID = PRC.ID WHERE PAR.IDADV_PARTETIPO = 1 ) RESULT Agora usando o OVER(PARTITION ...) está funcionando, mas está usando muitos recursos do servidor. O problema é que o PARTITION cria uma numeração de linha para cada processo, ou seja: ROWNR ID NOME 1 45 XXX 2 45 YYY 3 45 ZZZ 1 485 KKKKKKK 2 485 RSRSRSRS 1 644 MIMIMIMI e por ai vai. Sem o PARTITION ficaria assim: ROWNR ID NOME 1 45 XXX 2 45 YYY 3 45 ZZZ 4 485 KKKKKKK 5 485 RSRSRSRS 6 644 MIMIMIMI Ele segue a contagem normal. O problema é que, com a subquery que passei acima, não a ROWNR 2 para o ID 485, e sim a ROWNR 5. Já consegui fazer isso anteriormente, a mais de um mês, mas não lembro como fiz :o Alguma sugestão?
  16. Pessoal, bom dia! Estou com problemas no Crystal. Uso o Crystal 11 e VB6. Existe em nosso projeto do VB6 uma rotina global para abertura de relatório, verificando se o relatório abrirá através de uma View ou Procedure e passando devidamente os parâmetros. Precisei alterar 4 relatórios: todos eram Views e passei para SProc. Ao realizar os testes no Preview do próprio Crystal, tudo ocorre muito bem. Ao realizar testes pelo projeto, o componente que usamos (Crystal Reports Viewer) apresenta a mensagem de Logon Failed. O mais estranho é que outros relatórios (que usam View ou SProc) estão abrindo normalmente. Isso indica que há alguma coisa errada nos meus relatórios. Contudo, porque consigo visualizar normalmente os dados pelo Crystal? Ao debugar o projeto, os dados de conexão estão iguais aos demais relatórios. Alguém já enfrentou esse problema?
  17. Xistyle

    Quebra de linha (VB.NET)

    Ainda estou apanhando desse VB.NET... preciso tirar mais uma dúvida que parece óbvio, mas não consigo enxergar. Tenho uma DataGridView. Ela carrega as informações de um DataTable. Inicialmente, na grid, são carregados apenas alguns dados. Ao clicar em uma linha, as demais informações são carregadas em seus respectivos TextBoxes. Isso ocorre no evento CellClick da Grid. Gostaria que, ao pressionar a seta para baixo, fosse simulado o CellClick na linha de baixo. Usei o KeyDown para verificar a seta para baixo e chamei o CellClick da seguinte forma: Private Sub dgvResultado_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvResultado.KeyDown Dim eDataGridEvents As System.Windows.Forms.DataGridViewCellEventArgs If e.KeyValue = Keys.Down Then dgvResultado_CellClick(dgvResultados, eDataGridEvents) End If End Sub Porém, se na Grid a linha selecionada tem Index = 2, no KeyDown ele vale 1. Como arrumar isso?
  18. Xistyle

    Quebra de linha (VB.NET)

    Bom se alguém tiver idéia de como me ajudar de outra forma então, está bem vindo... Tenho uma TreeView. Gostaria de, ao clicar em um nó da TreeView, que fosse mostrado um Panel. O problema é que gostaria de usar alguns recursos gráficos. No evento Paint desse Panel, coloquei algumas rotinas pra (espero) abrir o panel em Smooth. Agora... como devo chamar esse evento? Em que momento ele é chamado?
  19. Xistyle

    Quebra de linha (VB.NET)

    É não deu muito o que quis fazer... tentei fazer uma verificação da palavra, pela proximidade do espaço. Pega a palavra cortada, busca o próximo espaço, pega o resto da palavra e concatena. Ai insere a quebra de linha. Mas não deu muito certo :/ Vou procurar outra forma de fazer...
  20. Xistyle

    Quebra de linha (VB.NET)

    É Gafanhoto! Também não achei nada na net. Vou tentar montar uma funçãozinha aqui e daqui a pouco posto ela :)
  21. Camaradas, boa tarde! Estou com uma dúvida lógica e não sei muito bem como resolvê-la. Preciso delimitar o tamanho de um texto em uma quantidade x de letras, mas também não posso cortar as palavras. Basicamente preciso de um algoritmo para simular o Quebra de linha automática/Word Wrap" do Notepad. Alguém tem alguma idéia? Abraços
  22. Encontrei o erro neste meu caso! O erro 0x800A0E3C é genérico, devido a dll que apresentou o erro ser de uso geral pelo VS. Assim encontrei um único site falando que poderia ser um erro de leitura no Excel, que o Excel entenderia o dado como uma fórmula. E era isso mesmo! O dado iniciava com =====, ou seja, o Excel não encontrou a fórmula (exemplo: =SOMA(A1:A10)). Com isso, coloquei uma rotina apenas para incluir um espaço em branco para corrigir! P$%@ workaround mas funfou!
  23. Pessoal, boa noite! Passei o dia todo pesquisando na net, mas nada me adiantou. Espero que possam em ajudar. Tenho uma aplicação que possui relatórios. Os relatórios podem ser exportados via Excel ou Crystal. Quando escolhido Excel, a rotina de exportação chama uma classe que criei que não estava dando problema algum... Contudo, de ontem pra hoje, começou a dar uns "paus". Os erros que ocorrem são: - Exception from HRESULT: 0x800A0E3C - A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll Não faço idéia do que seja! Cada site passa uma informação. Alguém já teve esse erro e foi resolvido? Acho que não é erro no código, pois o delimitei o SELECT que traz os dados, não incluindo o registro que apresentou erro e funcionou. Ainda assim, com outros filtros, funciona normalmente. ****** UPDATE: Realizei um teste removendo os dados de algumas linhas e mesmo assim o erro persistiu ****** Lembrando que é uma rotina genérica. Abaixo segue o código: Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Public Class clsExcel '# Rotina que recebe o cabeçalho e exporta os dados para o Excel Public Sub gfcnExportarExcel(ByRef dtbDados As System.Data.DataTable, ByVal lstrNomeArquivo As String, Optional ByVal lintProcessoExistente As Integer = 0) Dim lobjExcel As New Excel.Application() Dim lbokPasta As Excel.Workbook Dim lshtPlanilha As New Excel.Worksheet Dim lcdlArquivo As New SaveFileDialog Dim lintContador As Integer Dim lintSomaProcesso As Integer = 0 Dim lintIDProcesso As Integer = 0 Dim lstrExtensao As String Dim lstrUltimaColuna As String = "" Dim lstrUltimaLinhaExcel As String Dim lproExcel As Process = Nothing Try '# Verifica se o Excel está instalado na máquina If lobjExcel Is Nothing Then MessageBox.Show("O Excel não foi encontrado neste computador. Verifique se está corretamente instalado!", "DIG", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If '# Cria a pasta de trabalho lbokPasta = lobjExcel.Workbooks.Add '# Verifica se o documento possui mais de uma planilha (que não seja a que estamos exportando) '# e as exclui. If lbokPasta.Worksheets.Count > 1 Then For lintPlanilha As Integer = 1 To 3 If lintPlanilha = 3 Then '# Cria a planilha e atribui o nome lshtPlanilha = lbokPasta.Worksheets.Add() lbokPasta.Worksheets.Item(1).Name = "Relatório" lbokPasta.Sheets(2).Delete() Else lbokPasta.Sheets(lintPlanilha).Delete() End If Next End If lintContador = 0 '# Pega a extensão do arquivo e última linha do Excel, dependendo da versão lstrExtensao = Microsoft.VisualBasic.Right(lstrNomeArquivo, 4) lstrUltimaLinhaExcel = IIf(UCase(lstrExtensao) = ".XLS", "65536", "1048576") '# Formata o cabeçalho For Each colCabecalho As DataColumn In dtbDados.Columns '# Realiza o teste para importar apenas colunas que não contenham as IDS If Mid(colCabecalho.Caption, 1, 2) <> "ID" Or colCabecalho.Caption = "ID_PUB" Then lintContador += 1 With lshtPlanilha .Cells(1, lintContador) = colCabecalho.Caption .Cells(1, lintContador).Font.Bold = True .Cells(1, lintContador).Font.Color = RGB(255, 255, 255) 'Branco .Cells(1, lintContador).Interior.ColorIndex = 5 'Azul '# Recebe a última coluna da planilha e alinha o texto do cabeçalho no centro lstrUltimaColuna = Replace(lshtPlanilha.Cells(1, lintContador).Address(False, False), lshtPlanilha.Cells(1, lintContador).Row, "") .Range(lstrUltimaColuna + "1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter End With End If Next lintContador = 0 '# Passa os valores do DataTable para as células do Excel '# Preenche a primera coluna For Each lcolColuna As DataColumn In dtbDados.Columns '# Verifica se a coluna que irá ser preenchida não é uma coluna de ID If Mid(lcolColuna.Caption, 1, 2) <> "ID" Or lcolColuna.Caption = "ID_PUB" Then '# Preenche as linhas For llngLinha As Integer = 0 To (dtbDados.Rows.Count - 1) '# Troca os ENTERs do campo texto por espaços If UCase(lcolColuna.Caption) = "TEXTO" Then lshtPlanilha.Cells((llngLinha + 2), (lcolColuna.Ordinal - lintContador) + 1) = lfcnTrocaCaracteres(CType(dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal), String)) Else lshtPlanilha.Cells((llngLinha + 2), (lcolColuna.Ordinal - lintContador) + 1) = dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal) End If System.Windows.Forms.Application.DoEvents() Debug.Print(dtbDados.Rows(llngLinha).ItemArray(0).ToString + " - " + dtbDados.Rows(llngLinha).ItemArray(lcolColuna.Ordinal).ToString) Next lintContador -= 1 End If System.Windows.Forms.Application.DoEvents() lintContador += 1 Next '# Formata a fonte lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Font.Name = "Calibri" '# Limita a altura e largura de campos com quantidade de caracteres muito grande lshtPlanilha.Rows.RowHeight = 14.25 '# Configura o estilo da borda e tamanho lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders.LineStyle = Excel.XlLineStyle.xlContinuous lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeBottom).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeLeft).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeRight).Weight = 4 lshtPlanilha.Range("A1:" + lstrUltimaColuna + (Convert.ToString(dtbDados.Rows.Count + 1))).Borders(Excel.XlBordersIndex.xlEdgeTop).Weight = 4 '# Salva o arquivo com o nome especificado no SaveFileDialog que chamou a rotina de exportação lbokPasta.SaveAs(lstrNomeArquivo) MessageBox.Show("Relatório exportado com sucesso!", "DIG", MessageBoxButtons.OK, MessageBoxIcon.Information) Marshal.FinalReleaseComObject(lshtPlanilha) lbokPasta.Close(SaveChanges:=False) Marshal.FinalReleaseComObject(lbokPasta) lobjExcel.Quit() Marshal.FinalReleaseComObject(lobjExcel) lobjExcel = Nothing lbokPasta = Nothing lshtPlanilha = Nothing Catch ex As Exception MessageBox.Show("Ocorreu um erro durante o processo de exportação." + vbCrLf + _ "Erro:" + vbCrLf + _ ex.Message, "DIG", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally '# Faz a soma de todos os Excel's abertos, incluindo o relatório For Each lproProcesso As Process In Process.GetProcessesByName("EXCEL") lintSomaProcesso += lproProcesso.Id Next lproProcesso lintIDProcesso = lintSomaProcesso - lintProcessoExistente If lintIDProcesso <> 0 Then lproExcel = Process.GetProcessById(lintIDProcesso) If lproExcel IsNot Nothing Then lproExcel.Kill() End If End Try End Sub Private Function lfcnTrocaCaracteres(ByVal lstrValorCampo As String) As String Dim lstrCaracterEspecial(97) As String Dim lintContador As Integer lstrCaracterEspecial(0) = Chr(9) 'Tab lstrCaracterEspecial(1) = Chr(11) 'Tab lstrCaracterEspecial(2) = Chr(13) 'Enter lstrCaracterEspecial(3) = Chr(127) 'DEL lstrCaracterEspecial(4) = Chr(128) '€ lstrCaracterEspecial(5) = Chr(129) ' lstrCaracterEspecial(6) = Chr(131) 'ƒ lstrCaracterEspecial(7) = Chr(132) '„ lstrCaracterEspecial(8) = Chr(133) '… lstrCaracterEspecial(9) = Chr(134) '† lstrCaracterEspecial(10) = Chr(135) '‡ lstrCaracterEspecial(11) = Chr(136) 'ˆ lstrCaracterEspecial(12) = Chr(137) '‰ lstrCaracterEspecial(13) = Chr(138) 'Š lstrCaracterEspecial(14) = Chr(139) '‹ lstrCaracterEspecial(15) = Chr(140) 'Œ lstrCaracterEspecial(16) = Chr(141) ' lstrCaracterEspecial(17) = Chr(142) 'Ž lstrCaracterEspecial(18) = Chr(143) ' lstrCaracterEspecial(19) = Chr(144) ' lstrCaracterEspecial(20) = Chr(145) '‘ lstrCaracterEspecial(21) = Chr(147) '“ lstrCaracterEspecial(22) = Chr(148) '” lstrCaracterEspecial(23) = Chr(149) '• lstrCaracterEspecial(24) = Chr(152) '˜ lstrCaracterEspecial(25) = Chr(153) '™ lstrCaracterEspecial(26) = Chr(154) 'š lstrCaracterEspecial(27) = Chr(155) '› lstrCaracterEspecial(28) = Chr(156) 'œ lstrCaracterEspecial(29) = Chr(157) ' lstrCaracterEspecial(30) = Chr(158) 'ž lstrCaracterEspecial(31) = Chr(159) 'Ÿ lstrCaracterEspecial(32) = Chr(161) '¡ lstrCaracterEspecial(33) = Chr(162) '¢ lstrCaracterEspecial(34) = Chr(163) '£ lstrCaracterEspecial(35) = Chr(164) '¤ lstrCaracterEspecial(36) = Chr(165) '¥ lstrCaracterEspecial(37) = Chr(166) '¦ lstrCaracterEspecial(38) = Chr(167) '§ lstrCaracterEspecial(39) = Chr(168) '¨ lstrCaracterEspecial(40) = Chr(169) '© lstrCaracterEspecial(41) = Chr(171) '« lstrCaracterEspecial(42) = Chr(172) '¬ lstrCaracterEspecial(43) = Chr(174) '® lstrCaracterEspecial(44) = Chr(175) '¯ lstrCaracterEspecial(45) = Chr(177) '± lstrCaracterEspecial(46) = Chr(180) '´ lstrCaracterEspecial(47) = Chr(181) 'µ lstrCaracterEspecial(48) = Chr(182) '¶ lstrCaracterEspecial(49) = Chr(183) '· lstrCaracterEspecial(50) = Chr(184) '¸ lstrCaracterEspecial(51) = Chr(187) '» lstrCaracterEspecial(52) = Chr(188) '¼ lstrCaracterEspecial(53) = Chr(189) '½ lstrCaracterEspecial(54) = Chr(190) '¾ lstrCaracterEspecial(55) = Chr(191) '¿ lstrCaracterEspecial(56) = Chr(198) 'Æ lstrCaracterEspecial(57) = Chr(208) 'Ð lstrCaracterEspecial(58) = Chr(215) '× lstrCaracterEspecial(59) = Chr(216) 'Ø lstrCaracterEspecial(60) = Chr(221) 'Ý lstrCaracterEspecial(61) = Chr(222) 'Þ lstrCaracterEspecial(62) = Chr(223) 'ß lstrCaracterEspecial(63) = Chr(230) 'æ lstrCaracterEspecial(64) = Chr(248) 'ø lstrCaracterEspecial(65) = Chr(253) 'ý lstrCaracterEspecial(66) = Chr(254) 'þ lstrCaracterEspecial(67) = Chr(255) 'ÿ lstrCaracterEspecial(68) = Chr(1) ' lstrCaracterEspecial(69) = Chr(2) ' lstrCaracterEspecial(70) = Chr(3) ' lstrCaracterEspecial(71) = Chr(4) ' lstrCaracterEspecial(72) = Chr(5) ' lstrCaracterEspecial(73) = Chr(6) ' lstrCaracterEspecial(74) = Chr(7) ' lstrCaracterEspecial(75) = Chr(8) ' lstrCaracterEspecial(76) = Chr(10) ' lstrCaracterEspecial(77) = Chr(11) ' lstrCaracterEspecial(78) = Chr(12) ' lstrCaracterEspecial(79) = Chr(14) ' lstrCaracterEspecial(80) = Chr(15) ' lstrCaracterEspecial(81) = Chr(16) ' lstrCaracterEspecial(82) = Chr(17) ' lstrCaracterEspecial(83) = Chr(18) ' lstrCaracterEspecial(84) = Chr(19) ' lstrCaracterEspecial(85) = Chr(20) ' lstrCaracterEspecial(86) = Chr(21) ' lstrCaracterEspecial(87) = Chr(22) ' lstrCaracterEspecial(88) = Chr(23) ' lstrCaracterEspecial(89) = Chr(24) ' lstrCaracterEspecial(90) = Chr(25) ' lstrCaracterEspecial(91) = Chr(26) ' lstrCaracterEspecial(92) = Chr(27) ' lstrCaracterEspecial(93) = Chr(28) ' lstrCaracterEspecial(94) = Chr(29) ' lstrCaracterEspecial(95) = Chr(30) ' lstrCaracterEspecial(96) = Chr(31) ' lstrCaracterEspecial(97) = "#" lfcnTrocaCaracteres = "" For lintContador = 0 To UBound(lstrCaracterEspecial) If InStr(1, lstrValorCampo, lstrCaracterEspecial(lintContador)) > 0 Then If lintContador = 23 Or lintContador = 49 Then '• ou · lstrValorCampo = Replace(lstrValorCampo, lstrCaracterEspecial(lintContador), "*") Else lstrValorCampo = Replace(lstrValorCampo, lstrCaracterEspecial(lintContador), " ") End If End If Next lfcnTrocaCaracteres = lstrValorCampo End Function End Class
  24. Pessoal, boa tarde! Estou com um problema. Preciso fazer um SELECT e retornar um registro (se existente) de acordo com um texto, que é definido pelo usuário. Porém, o LIKE não está me ajudando. O campo TEXTO do código abaixo é do tipo TEXT. -- ESSE NÃO FUNCIONA SELECT * FROM TABELA WHERE TEXTO LIKE '%nononnnoononono nonononononoonon ononononononon oonononnononononono nononono no no oo nono nnono nono nono on no onononon ononono on o nono n ono nonooonoo oonnonono no non on on no o ononon onon onono oonono nonon onono non onononon onononono nonono nonono nonon ono nono noon ono no n on on on on ononon onono nono non on on on on ononononono nonononon onononononono nonono nonono nonono nono nono non onono nonono nonon onono no nono no%' -- ESSE FUNCIONA SELECT * FROM TABELA WHERE TEXTO LIKE '%nononnnoononono nonononononoonon%' Usei um texto fictício, pois estou trabalhando com alguns dados "sérios". Mas basicamente o problema é o seguinte: se eu uso a query que FUNCIONA, copiar o texto localizado e colocar no LIKE, nenhum registro é retornado! Alguma idéia?
  25. Pessoal, dúvida rápida! Tenho um ProgressBar em um Form que retorna dados de uma consulta. Esse Form possui um botão chamado "Exportar Excel", que chama uma classe do Excel que montei especificamente para exportar dados dessa grid para o Excel. Gostaria que o ProgressBar fosse alimentado, para mostrar ao usuário que o processo está sendo exportado. Porém, como faço isso? Toda a rotina de alimentação da planilha está na classe Excel. Como faria o incremento da barra desse Form na classe, sem ter problemas de instância?
×
×
  • Criar Novo...