Ir para conteúdo
Fórum Script Brasil

namon

Membros
  • Total de itens

    13
  • Registro em

  • Última visita

Tudo que namon postou

  1. Para importar uma planilha excel para MDB via código, posso utilizar o código abaixo: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Sub cmdexecuta_Click() Dim rsdados As Recordset Dim x As Object Dim linha As Integer Dim strvalor_A As String, strvalor_B As Integer, strvalor_C As String Set x = CreateObject("Excel.Application.8") 'para o office 97/2000 x.Workbooks.Open(App.Path & "\Clientes.xls" x.Sheets("Clientes").Select x.Visible = False For linha = 2 To 10 '65536 e o valor maximo strvalor_A = x.rows(linha).cells(1).Value 'campo1 strvalor_B = x.rows(linha).cells(2).Value 'campo2 strvalor_C = x.rows(linha).cells(3).Value 'campo3 If strvalor_A = "FLAG" Then Exit For Else sSQl = "INSERT INTO TabelaClientes (campo1 ,campo2 , campo3 )" sSQl = sSQl & " VALUES ( '" & strvalor_A & "', '" & strvalor_B & "' ,'" & strvalor_C & "' ) " Set rsdados = db.Execute(sSQl) End If Next x.ActiveWorkbook.Close x.quit 'Abro um modulo colocando o seguinte codigo Option Explicit Public db As ADODB.Connection Sub AbreBanco() Dim sPath As String Set db = New ADODB.Connection sPath = App.Path & "\dados.mdb" db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath End Sub -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------No entanto a planilha que preciso importar contém dados em várias linhas para um mesmo cliente, a saber: Cabeçalho Nome cliente(A1) CodCli (B1) valor_a(C1) valor_b(D1) valor_c(E1) valor_d(F1) totalgeral(G1) cliente1 (A2) 100005(B2) 0,00(C2) 0,00(D2) 1200,00(E2) 0,00(F2) 1442,00(G2) cliente1 (A3) 100005(B3) 0,00(C3) 0,00(D3) 0,00(E3) 0,00(F3) 0,00(G3) cliente1 (A4) 100005(B4) 70,00(C4) 0,00(D4) 0,00(E4) 0,00(F4) 0,00(G4) cliente1 (A5) 100005(B5) 0,00(C5) 52,00(D5) 0,00(E5) 0,00(F5) 0,00(G5) cliente1 (A6) 100005(B6) 0,00(C6) 0,00(D6) 0,00(E6) 120,00(F6) 0,00(G6) cliente2 (A7) 190032(B7) 0,00(C7) 97,70(D7) 0,00(E7) 0,00(F7) 487,70(G7) cliente2 (A8) 190032(B8) 315,00(C8) 0,00(D8) 0,00(E8) 0,00(F8) 0,00(G8) cliente2 (A9) 190032(B9) 0,00(C9) 0,00(D9) 0,00(E9) 75,00(F9) 0,00(G9) cliente3(A10)... e assim sucessivamente 8-> A soma de todos os valores de cada cliente fica somente na Célua G(x), primeira linha de cada cliente -> a quantidade de cada cliente varia conforme os valores que possui em carteira, no máximo de 5 linhas/cliente No exemplo acima: o cliente1 possui 5 linhas; já o cliente2 possui 3 linhas apenas Preciso que a rotina importe uma linha para cada cliente, somando TODOS os valores por cliente: cliente1 (A2) 100005(B2) 70,00(C2) 52,00(D2) 1200,00(E2) 120,00(F2) 1442,00(G2) cliente2 (A7) 190032(B7) 315,00(C7) 97,70(D7) 0,00(E7) 75,00(F7) 487,70(G7) É possível via código no VB6?? Quanto à tabela do MDB no VB6, chama-se CredDeb com a seguinte estrutura: Tabela: CredDeb Indices: Cod_cliente - Primário Nome_cliente Campos: Cod_cliente Texto/8 Nome_cliente Texto/70 Credito1 Dupla/10 Credito2 Dupla/10 Credito3 Dupla/10 Credito3 Dupla/10 Credito4 Dupla/10 Credito5 Dupla/10 Cregeral Dupla/10
  2. Obrigado Kuroi! você é fera! Alguns ajuste vou ter que fazer ainda, mas já dei o pontepé inicial com seus esclarecimentos Abraços Enéa
  3. Boa noite Kuroi, Fiz o teste mas não funcionou! Esse formulário com o Grid que utilizo é o padrão do VB6 (DataGrid) e não o MSFlexGrid. Trata-se de uma formulário que é alimentado por Importação de arquivo TXT e não permite alterações, somente visualização, razão pelo qual utilizo o DataGrid. Essa rotina que você me passou, como fica para o DataGrid? Agradeço! Enéa
  4. Obrigado Kuroi! Vou testar e posto aqui! Até amanhã e abraços!
  5. Kuroi, Na realidade tentei de TUDO, inclusive adptar esse codigo que passei. Mas não consegui com nada! E mão tenho nenhuma idéia de como conseguir. Já vasculhei a nete não encontrei nada específico!
  6. Re: Help in Msflexgrid -------------------------------------------------------------------------------- VB Code: Option Explicit Private Sub Command1_Click() '1st parameter is the first column and the 2nd one is the last column 'the result is calculated between those two columns, including both of theme Text1.Text = getColumnSum(MSFlexGrid1, 0, 1) Text2.Text = getColumnSum(MSFlexGrid1, 2, 8) End Sub Private Function getColumnSum(mfg As MSFlexGrid, clmn1 As Integer, clmn2 As Integer) As Double Dim i As Integer, j As Integer For i = clmn1 To clmn2 With mfg .Col = i For j = 0 To .Rows - 1 .Row = j getColumnSum = getColumnSum + Val(.Text) Next j End With Next End Function -> É no MSFLEXGrid
  7. Prezado Kuroi, Encontrei num fragmento de uma função em VBA (apenas anotei, há algum tempo). Enéa
  8. VB - Como somar colunas do GRID (filho) e alimentar campo do PAI. Já tentei de várias formas, inclusive com a função MeuGrid.GetColumnSum(Coluna), mas apenas o primeiro registro da tabela é transportado. Se alguém puder me ajudar, agradeço. namon namon@uai.com.br
  9. Kuroi, Exatamente o que disseste! Percorri o arquivo TXT e eis que encontro duplicidade. Obrigado pela força TÓPICO ENCERRADO! :rolleyes:
  10. Kuroi, agora "pirei". Efetuei as alterações: Set PAI = vgDb.OpenRecordSet("Select * From PAI Order By Codigo", dbOpenTable) If PAI.RecordCount > 0 Then PAI.MoveFirst Set FILHO = vgDb.OpenRecordSet("Select * From FILHO Order By Codigo", dbOpenTable) If FILHO.RecordCount > 0 Then FILHO.MoveFirst Apliquei F9 na linha Do While Not FILHO.EOF e executei. Apertando F8 a rotina pula para RollBack e apresenta a mensagem de erro: "Não foi possível atualizar o arquivo TXT Motivo: O mecanismo de banco de dados Microsoft Jet não pôde encontrar o objeto 'Select * FROM Familia Order By Codigo'. Certifique-se de que o objeto exista e de ter digitado seu nome e o caminho corretamernte. Existe o Campo codigo nas duas tabelas; são chaves primárias e na rotina anterior ele atualizava o primeiro registro Não entendi nada!!!
  11. Kuroi, Eliminei a linha indicada, mas continua somente PROCESSANDO a alteração no PRIMEIRO registro! A seqüência (ordem) dos comandos estariam errados? namon
  12. Obrigado Kuroi! Fiz algumas alterações mas continua atualizando somente o primeiro registro. Veja abaixo as alterações: BeginTrans Set PAI = vgDb.OpenRecordSet("PAI", dbOpenTable) If PAI.RecordCount > 0 Then PAI.MoveFirst Set FILHO = vgDb.OpenRecordSet("FILHO", dbOpenTable) If FILHO.RecordCount > 0 Then FILHO.MoveFirst Do While Not FILHO.EOF With PAI .Edit If PAI!Codigo = FILHO!Codigo And FILHO!Tppar = 1 Then PAI!Ident = FILHO!Ident PAI!Nome = FILHO!Nome PAI!TotalDespesas = FILHO!Despesas PAI!TotalReceitas = FILHO!Receitas PAI!TotalPessoas = FILHO!Qtpessoas End If .Update PAI.MoveNext FILHO.MoveNext .BookMark = .LastModified End With Loop End If End If CommitTrans End Sub
  13. Em meu projeto (Formulário em GRID- PAI e FILHO). Inseri uma rotina para atualizar um campo do PAI a partir FILHO, segundo condições. Importa um arquivo TXT para um MDB com mais de 18 mil registros. Após isso, necessito atualizar alguns campos do PAI que vieram preenchidos no FILHO pela importação. Nesse exemplo, 4 campos no PAI a serem atualizados: a) Campo Ident (IDENTIFICADOR do Responsável) que está em UMA LINHA do Grid FILHO (somente um é o respsonsável) B) Campo Receitas que é a soma de determinada coluna do Grid FILHO; c) Campo Despesas que é a soma de determinada coluna do Grid FILHO; e) Campo TotalPessoas que é a contagem das pessoas do Grid FILHO Com a rotina abaixo esperava atualizar cada registro do PAI um a um e não consegui nem mesmo para o primeiro campo, pois ao rodar a rotina, apenas atuliza o primeiro Ident do PAI e os demais permanecem em branco. Rotina: (fragmento) BeginTrans Set PAI = vgDb.OpenRecordSet("FILHO", dbOpenTable) If PAI.RecordCount > 0 Then PAI.MoveFirst Set FILHO = vgDb.OpenRecordSet("FILHO", dbOpenTable) If FILHO.RecordCount > 0 Then FILHO.MoveFirst Do While Not FILHO.EOF With PAI .Edit If PAI!Codigo = FILHO!Codigo Then PAI!Ident = FILHO!Ident PAI!Nome = FILHO!Nome PAI!ReceitasTotais = FILHO!Receitas PAI!DespesasTotais = FILHO!Despesas End If .Update .BookMark = .LastModified End With End If FILHO.MoveNext Loop End If End If CommitTrans End Sub Executando a rotina, apenas o PRIMEIRO registro é atualizado dando a impressão que não percorre a TABELA Registro por Registro. Onde está o meu erro e como corrigir? namon
×
×
  • Criar Novo...