Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Criei um formulário no meu projeto para visualizar resumidamente as Ordens de servisos e a partir delas ter acesso a ordem detalhada.
Com isso criei duas DataGrid.
Um com o nome de DGSolicitador que mostras os dados do cliente e outra com o nome de DGItens para mostras os itens que cada ordem de serviço recebe.
Para melhor entendimento tem a imagem abaixo.
/applications/core/interface/imageproxy/imageproxy.php?img=https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-snc7/374430_466407656735586_2102652039_n.jpg&key=3656f43affb836f68d6ac02c0d4874d3d28dfee8ae8982a9691d85a2efb0fc40" alt="374430_466407656735586_2102652039_n.jpg" />
Bom o que quero fazer é o seguinte, podem notar que na DataGrid de cima que tem os dados do cliente, esta selecionado a ordem de serviço número 18 e na DataGrid de baixo que tem as lista de Itens, tem um item que pertence a ordem de serviço número 6 e outra que pertence ao número 18.
Gostaria que quando eu selecionace a ordem de serviço na Grid de cima automaticamente ja filtrasse ficando somente os itens da Ordem delecionada.
Estou usando VB6
Dez de ja Agradeço
É isso o que eu quero.
Mas pra isso éi preciso saber que código é que esta selecionado no DataGrid de cima para filtrar o de baixo. Só que não estou conseguindo o código para extrair a informação da célula selecionada da coluna Codigo.
O datagrid tem um método que chama "SelectedCell", o que você precisa fazer é pegar ele dessa forma:
Grid.SelectedCell.ToString()
Khaos,
Conforme a imagem abaixo:
/applications/core/interface/imageproxy/imageproxy.php?img=https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash3/561626_466468056729546_656473154_n.jpg&key=1c5f0d4d24c70ca4a998f76925d8236c0417e44156513e09a30b00f68e964f7e" alt="561626_466468056729546_656473154_n.jpg" />
Não a esse comando de selected no DataGrid do VB6. A não ser que eu tenha que mexer em alguma propriedade do Grid
Putz, eu achei alguns exemplos:
http://answers.yahoo.com/question/index?qid=20070803083906AAmPvid
Mas eu encontrei uma referencia na MSDN dizendo que o SelEndCol e o SelStartCol são equivalentes a esse comando que eu passei
http://msdn.microsoft.com/pt-br/library/y4ddh1ac(v=vs.80).aspx
Infelizmente não to conseguindo.
Tenter fazer dessa forma.
Private Sub DGSolicitador_SelChange(Cancel As Integer)
Abre_Conexao
Dim Codigo2 As String
Codigo2 = DGSolicitador.GetBookmark(0)
SQL = "Select * from ListItens where Codigo = '" & Codigo2 & "'"
ADOItens.CommandType = adCmdText
ADOItens.RecordSource = SQL
ADOItens.Refresh
Tabela.Open SQL, conexao, adOpenForwardOnly, adLockReadOnly '<<<<<< erro aqui'Erro com o nome de ADODC1
Tipo de dados incompatível na expressão de critério
O que eu tendo no código é criar uma váriavel na SQL.
Essa váriavel eu queria pegar o valor da célula Codigo selecionada.
Alguém sabe como fazer isso??
Fiz uma pequena modificação e o código esta pegando na SQL
Abre_Conexao
Dim Codigo2 As String
Codigo2 = DGSolicitador.Columns(0).Value
SQL = "Select * from ListItens where Codigo = '" & Codigo2 & "'"
ADOItens.CommandType = adCmdText
ADOItens.RecordSource = SQL
ADOItens.Refresh
Tabela.Open SQL, conexao, adOpenForwardOnly, adLockReadOnly
Testando SQL
?SQL
Select * from ListItens where Codigo = '6'
Só que o erro perciste.
Aeee Khaos,
Muito obrigado pela ajuda. Após bater muito a cabeça aqui tentando entender o exemplo que me passou finalmente consegui. Como código é número, tinha que colocar aspa simples.
Fica o código para quem precisar.
Private Sub DGSolicitador_SelChange(Cancel As Integer) 'Sub para o código de selecionar uma linha na Grid de cima'
Abre_Conexao 'Abre a conexão com o banco de dados'
Dim Codigo2 As String 'Cria a variável para a SQL'
Codigo2 = DGSolicitador.Columns(0).Value 'Variável se torna o valor da célula selecionada na coluna Codigo'
SQL = "Select * from ListItens where Codigo = " & Codigo2 & "" 'Comando SQL com a variável'
ADOItens.CommandType = adCmdText 'Altera a propriedade CommandType para adCmdText da conexão ADODC para aceitar a SQL'
ADOItens.RecordSource = SQL 'Altera a RecordSource para o novo comando SQL criado'
ADOItens.Refresh 'Atualiza o DataDrid de Itens
Tabela.Open SQL, conexao, adOpenForwardOnly, adLockReadOnly>
Pessoal,
Criei um formulário no meu projeto para visualizar resumidamente as Ordens de servisos e a partir delas ter acesso a ordem detalhada.
Com isso criei duas DataGrid.
Um com o nome de DGSolicitador que mostras os dados do cliente e outra com o nome de DGItens para mostras os itens que cada ordem de serviço recebe.
Para melhor entendimento tem a imagem abaixo.
/applications/core/interface/imageproxy/imageproxy.php?img=https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-snc7/374430_466407656735586_2102652039_n.jpg&key=3656f43affb836f68d6ac02c0d4874d3d28dfee8ae8982a9691d85a2efb0fc40" alt="374430_466407656735586_2102652039_n.jpg" />
Bom o que quero fazer é o seguinte, podem notar que na DataGrid de cima que tem os dados do cliente, esta selecionado a ordem de serviço número 18 e na DataGrid de baixo que tem as lista de Itens, tem um item que pertence a ordem de serviço número 6 e outra que pertence ao número 18.
Gostaria que quando eu selecionace a ordem de serviço na Grid de cima automaticamente ja filtrasse ficando somente os itens da Ordem delecionada.
Estou usando VB6
Dez de ja Agradeço
Olá, sei que vou mudar de "saco" pra mala, mas percebi q você fez calculo dentro do datagrid, pode me orientar em como fazer isso!!!1
ola, fiz uma consulta parecida, e criei uma Query com a minha condicao, o que fiz foi o seguinte.
Tenho uma lista de paciente e outra de espera para etendimentos.
O que fiz foi, consultar o paciente e listar quais atendimentos ele esta esperando. pode ser que t ajude
Cristiane, no meu caso esse DataGrid e de somente consulta, ainda não pesquisei como fazer calculos dentro dele.
Os meus calculos estão sendo feito nas textboxs. Onde que fiz da seguinte forma.
txtTotal = Val(txtQuantidade) * Val(txtValUnitario)
Ele gera esse calculo antes de inserir no banco de dados.
Espero ter ajudado.
Khaos,
Sabe me dizer como posso alterar a propriedade connectionstring do ADODC para que eu possa salvar o projeto em qualquer lugar sem dar erro de conexão.
Atualmente ele esta assim:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Users\Marcos\Saved Games\Desktop\Projeto2\Teste\Dados.mdb;Persist Security Info=False
Sei que tenho que por App.Path mas esta dando erro nas aspas, poderia me dizer como tem que ficar no código para não ter conflito?
@Beavis
Copie o banco de dados para dentro da pasta "bin" da aplicação e mude a String (no app.config) para:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Dados.mdb;Persist Security Info=False
@Cristiane
Tente pesquisar o comando SUM do SQL, ele realiza contas de adição, existem outros comandos de calculo para os 4 básicos.
Pasta Bin???
Que pasta é essa?
Quando você cria uma solution e debuga ela, o VB cria uma pasta chamada bin, dentro da pasta da solução, é onde se encontram os arquivos executáveis e necessários da sua aplicação.
Khoas,
Procurando na internet código e tal para conexão achei esse.
Conexão:
Public Sub ConectaADODC()
Arquivo = App.Path & "\Dados.mdb"
ADODCconect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Arquivo & ";Persist Security Info=False"
ADODCconect.CursorLocation = adUseClient
ADODCconect.Open
End Sub
Ao carregar o formulário
Private Sub Form_Load()
ConectaADODC
Dados.ConnectionString = ADODCconect
Set DataGrid1.DataSource = Dados
LimpaConsulta
End Sub
Fazendo isso estava dando certo, podia colocar onde eu quizesse o programa que funcionava corretamente.
Mas aii pensei se esta funcionando é porque deve estar gerando algum string na propriedade ConnectionString do ADODC.
Então testar o nome no Immediate olha no que deu:
?Dados.ConnectionString
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=Dados.mdb;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;
Bom o código é enorme. Ai resolvi colocar esse comando direto la nas propriedades para ficar fixo. E apaguei os códigos de conexão. E pra minha alegria continuou funcionando o programa perfeitamente.
Então me diga é válido esse código, que se for vou colocar ele ali em cima nos tutorias porque não achei nada na net parecido.
Sim, se está funcionando ele é válido, porém eu costumo fazer de maneira diferente. Não encontrou a pasta Bin?
Não encontrei essa pasta não. Poderia me dizer o caminho. Porque na pasta do projeto não esta.
Outra coisa é que esse código deu errado.
Ontem ele estava funcionando perfeitamente, incluxive fiz vários testes.
Mas hoje quando liguei o PC novamente ele começou a acusar que não estava achando o banco de dados na pasta sisten32.
Muito enstranho isso pois tava tudo certo e eu não mexi em nada :@
Você verificou se o BD estava na pasta System?
Geralmente a pasta bin fica no diretório onde você salvou a solution, vai ter uma pasta bin, uma release e outras pastas juntamente com todos os arquivos que você salvou sua solução.
Khaos,
Na verdade não é para a pasta estar no Sistem, e sim onde o executavel estiver.
Muito estranho o código do connectionString funciona sim, só tive que continuar mantendo o código:
Private Sub Form_Load()
ConectaADODC
Dados.ConnectionString = ADODCconect
Set DataGrid1.DataSource = Dados
LimpaConsulta
End Sub
Sei la parece que quando reinicia o PC ele se perde as configurações então com esse código ele tipo que se reatualiza.
Bom finalmente consegui.
Que dor de cabeça que isso aqui da hennnn meu paiii hehehhehee.
Vlww aii pela ajuda.
Vou te dar a lógica, pode ser que no VB6 seja diferente com essas coisas de RecordSet e tudo mais.
Ao selecionar uma célula dentro do primeiro grid, antes de fazer a consulta no banco de dados buscando todos os itens com o ID de numero 18, limpe o DataGrid, tirando sua DataSource, utilizando também o comando "grid.rows.clear" e "grid.collumns.clear", depois de feito isso você preenche uma DataTable e a adiciona como Datasource do segundo grid.