BANCO DE DADOS

FRATA 12/04/2017 14:33:12
#473266
Tá bom, colegas!
Então vou perguntar diferente.
No meu sistema só vai ter nome e telefone.
Aí eu cadastro a ana1 com telefone 11111111
e depois cadastro a ana2 com telefone 2222222.
Sem cpf sem nada.
Minha chave primária vai ser o número de ID.
O que está acontecendo:
Quando eu quero retornar a ana2 para ver seu telefone vem o telefone da ana1.
Será que alguém sabe como resolver isso.
Ou seja, eu não consigo retornar se forem homônimos.
Simples assim.
Agradeço antecipadamente a todos pela atenção.
JABA 12/04/2017 14:54:14
#473267
Se eu fosse você, criaria um campo de CPF para fazer isso, pois só existe um cpf para cada cidadão. Se você não quer trabalhar desta forma, então não utilize o operador LIKE nas consultas, pois senão, a consulta poderá vir com mais de um registro. Alguns exemplos:

Se você conhece o ID deles, é só buscar por ele: [Ô]Select Telefone From Cliente Where ID = [Ô] & id
Se você quer pesquisar pelo nome e sabe que eles não se repetem, faça assim: [Ô]Select Telefone From Cliente Where Nome = [ô] [Ô] & nome & [Ô] [ô] [Ô]
Se você quer pesquisar pelo telefone e sabe que eles não se repetem, faça assim: [Ô]Select Telefone From Cliente Where Telefone = [ô] [Ô] & telefone & [Ô] [ô] [Ô]

OBS: Sem o operador Like para fazer a comparação, você, obrigatoriamente, deve incluir todo o conteúdo do campo para que ele possa ser encontrado.


OMAR2011 12/04/2017 15:31:53
#473268
Isto é para você entender abertura Banco de dados e tabelas com Ado.

Tabela.Open SQLString, Conexão, [CursorType], [LockType]
Explicações:
[CursorType]: Opcional. Um valor CursorTypeEnum que determina o tipo de cursor que o provedor deve usar ao abrir o Recordset. Pode ser uma das seguintes constantes:
Constante
Descrição
adOpenForwardOnly
Cursor somente progressivo. Padrão. Idêntico ao cursor estático exceto pelo fato de que é possível somente efetuar rolagem progressiva pelos registros. Isso melhora o desempenho em situações em que é necessária somente uma passagem pelo recordset.
adOpenKeyset
Cursor do conjunto de teclas. Como um cursor dinâmico, exceto pelo fato de que não é possível consultar os registros que outros usuário adicionaram, embora os registros excluídos por outros usuários sejam inacessíveis a partir do recordset. As alterações nos dados feitas por outros usuários permanecem visíveis.
adOpenDynamic
Cursor dinâmico. Adições, alterações e exclusões feitas por outros usuários são visíveis e todos os tipos de movimentos pelo recordset são permitidos, exceto indicadores, se o provedor não der suporte a eles.
adOpenStatic
Cursor estático. Uma cópia estática de um recordset que pode ser usada para localizar dados ou gerar relatórios. Adições, alterações ou exclusões feitas por outros usuários não são visíveis.
[LockType]: Opcional. Um valor LockTypeEnum que determina qual tipo de bloqueio (simultaneidade) o provedor deve usar ao abrir o Recordset. Pode ser uma das seguintes constantes:
Constante
Descrição
adLockReadOnly
Padrão. Somente leitura - não é possível alterar os dados.
adLockPessimistic
Bloqueio pessimista, registro por registro - o provedor faz o que for necessário para garantir o êxito da edição dos registros, em geral, bloqueando-os na fonte de dados imediatamente acima de uma edição.
adLockOptimistic
Bloqueio otimista, registro por registro - o provedor usa o bloqueio otimista, bloqueando os registros somente quando o método Update for chamado.
adLockBatchOptimistic
Atualizações em lotes otimistas - necessárias para o modo de atualização em lotes em oposição ao modo de atualização imediata.
Dim cn As New ADODB.Connection
cn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SeubANCO.mdb;Persist Security Info=False[Ô]
Dim cna As New ADODB.Recordset
cna.Open [Ô]Select * from teste [Ô], cn,[txt-color=#e80000] 3, 1[/txt-color]
Do While Not cna.EOF
List1.AddItem cna![id] & vbTab & cna![Nome] & vbTab & cna![valor]
cna.MoveNext
Loop

Mude os números onde está de vermelho,para preencher o Listbox,
e observe a posição dos registros.
DAMASCENO.CESAR 12/04/2017 19:28:28
#473271
FRATA, pelo jeito você quer criar uma agenda simples, aí você cadastra :
-id -Nome -telefone
1 Ana da Silva 99999-8888
2 Ana da Silva 88888-7777

Como você vai saber qual Ana da Silva você quer?
não existe nenhuma diferenciação entre elas se você pesquisar por nome, então não tem como você saber qual Ana da Silva que você quer também.
Quantos Jose dos Santos existem? provavelmente milhares, então, só com essa informação, como você vai saber se é o Jose dos Santos que voce quer, correto?
Por isso que todos sugerem o campo CPF, pois é único, porque(é assim que escreve??) nem mesmo o endereço é unico pois conheci uma familia que existiam duas [Ô]Francisca de Oliveira[Ô] no mesmo endereço - mãe e filha.
Se você for por aproximação de telefone, use um listview ou um grid para exibir todas as Ana da Silva que existir, aí você pode escolher a que mais se aproxima do telefone, mas se você não tiver base do telefone, vai poder ligar pra todas elas
PERCIFILHO 13/04/2017 13:06:07
#473292
Na minha humilde opinião, conforme os amigos já quiseram dizer, não existe você querer fazer uma operação em determinado registro da tabela ser por uma chave específica, seja ela um CPF ou mesmo o próprio ID do registro. Porque se você consultar pelo nome, sempre virá o primeiro que está cadastrado na tabela. Então, supondo que você tem uma lista desses registros com nome e telefone em um DataGridView, quando você clicar no registro que quer consultar, vai ter que pegar o ID desse registro para retornar os dados.
Tópico encerrado , respostas não são mais permitidas