Fazer uma PerguntaFazer uma Pergunta
 

RespondidoMostrar documentos - Erro

  • quinta-feira, 22 de outubro de 2009 23:09R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Estou tentando executar um comando sql, só que esta dando um erro. Como sou iniciante preciso de uma ajudinha.

    O comando é para mostrar os documentos de um determinado usuario.

    Comando:
    Pulei linhas apenas para melhor visualizaçao
    SELECT aspnet_Membership.UserId, Documentos.DocumentoId, documentosClientes.horaUpload From documentosClientes

    INNER JOIN aspnet_Membership on aspnet_Membership.UserId = Documentos.UserId

    INNER JOIN Documentos on aspnet_Membership.DocumentoId = documentosClientes.DocumentoId


    Erro:

    O identificador de várias partes "Documentos.UserId" não pôde ser vinculado.
    Nome de coluna inválido 'DocumentoId'.

    The multi-part identifier "Documentos.UserId" could not be bound.
    Invalid column name 'DocumentoId'.



    Minhas tabelas:

    aspnet_MemberShip - Contém todas informaçoes do usuario.
    - UserId

    Documentos - Armazena os documentos.
    - DocumentoId

    DocumentosClientes - Identificar doc para cada cliente
    - UserId
    - DocumentoID
    - horaUpload

Respostas

  • sexta-feira, 30 de outubro de 2009 1:52Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Cacae, rode apenas esse trecho no seu banco de dados e veja o q te retorna.

    SELECT 
        Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload 
    FROM 
              AspNet_MemberShip  AS Asp
    LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId 
    LEFT JOIN Documentos         AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId 
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como RespostaR. Cacae terça-feira, 3 de novembro de 2009 18:05
    •  

Todas as Respostas

  • quinta-feira, 22 de outubro de 2009 23:28Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Resposta PropostaContém Código
    Veja se te ajuda:
    SELECT 
        Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload 
    FROM 
               AspNet_MemberShip  AS Asp
    INNER JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId 
    INNER JOIN Documentos         AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId 
    




    se for útil não esquecça de classificar.
    att. Leonardo Marcelino
  • sexta-feira, 23 de outubro de 2009 0:02R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Po, não funcionou.
  • sexta-feira, 23 de outubro de 2009 0:09R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Meu código ai, caso tenha algo errado.
    Eu tambem ja fiz a relação entre as 3 tabelas.



    String strConn;
                strConn = @"string...";
                SqlConnection conn;
                conn = new SqlConnection();
                conn.ConnectionString = strConn;
    
                SqlCommand cmd;
                cmd = new SqlCommand();
                cmd.CommandText = "SELECT aspNet_MemberShip.UserId, Documentos.DocumentoId, DocumentosClientes.horaUpload FROM aspNet_MemberShip  AS aspNet_MemberShip INNER JOIN DocumentosClientes AS DocumentosClientes ON aspNet_MemberShip.UserId = DocumentosClientes.UserId INNER JOIN Documentos AS Documentos ON DocumentosClientes.DocumentoId = Documentos.DocumentoId";
                cmd.Connection = conn;
    
                conn.Open();
                GridView1.DataSource = cmd.ExecuteReader();
                GridView1.DataBind();
                conn.Close();
    

  • sexta-feira, 23 de outubro de 2009 0:20Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    A query esta certa, segue um novo exemplo, apenas mudei de inner join p/ left join, pois caso alguma destas tabela não tenha registro, retorne alguma coisa.

    DECLARE @aspnet_MemberShip  TABLE (UserId      INT IDENTITY(1,1) )
    DECLARE @Documentos         TABLE (DocumentoId INT IDENTITY(1,1))
    DECLARE @DocumentosClientes TABLE
    (
     UserId       INT,
     DocumentoID  INT,
     horaUpload   SMALLDATETIME
    )
    
    INSERT INTO @aspnet_MemberShip DEFAULT VALUES
    INSERT INTO @aspnet_MemberShip DEFAULT VALUES
    
    INSERT INTO @Documentos DEFAULT VALUES
    INSERT INTO @Documentos DEFAULT VALUES
    
    INSERT INTO @DocumentosClientes VALUES (1,1,'20090902 12:00:00')
    INSERT INTO @DocumentosClientes VALUES (2,1,'20090927 05:00:00')
    INSERT INTO @DocumentosClientes VALUES (1,1,'20091022 16:40:00')
    
    
    SELECT 
        Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload 
    FROM 
              @AspNet_MemberShip  AS Asp
    LEFT JOIN @DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId 
    LEFT JOIN @Documentos         AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId 
    



    att. Leonardo Marcelino
  • sexta-feira, 23 de outubro de 2009 0:28R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Esse codigo eu coloco do jeito que ta, ou preciso deixar tudo na mesma linha? Porque é muito grande. Pergunta meio estranha, mas ate agora mexi com comandos pequenos. ^^
  • sexta-feira, 23 de outubro de 2009 0:37Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    o código acima é p/ vc rodar no sql server p/ ver o resultado:

    apenas esta parte vc coloca no seu código:

    SELECT 
        Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload 
    FROM 
              AspNet_MemberShip  AS Asp
    LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId 
    LEFT JOIN Documentos         AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId 
    

    att. Leonardo Marcelino
  • sexta-feira, 23 de outubro de 2009 0:46R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Entendi.

    Agora preencheu o gridView, mas só a coluna de UserId, coisa que não era para aparecer. As outra duas colunas ficou em branco. Mas apareceu sem nenhum erro, isso ja é um bom sinal.
    Não executei o codigo grande ai no sql server, vou fazer isso agora.

    Outra
    Sobre o relacionamento das tabelas, eu puxei as chaves primarias da membership e documentos para a documentos clientes, e relaconei os campos. Na parte de relacionamento de tabelas é só isso que tem que fazer né?


    Obrigado por estar me ajudando.



  • sexta-feira, 23 de outubro de 2009 1:21R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Fui no bd > new query > executei query > parse > salvei em uma pasta;

    Apareceu:

    UserId     DocumentoId     HoraupLoad

    1          1               hora e data
    1          1               hora e data
    2          1               hora e data


    Acho que deu certo =)
    Mas oque eu faço agora? Executando o projeto, aparece só o conteudo da coluna userId no aspx os outros conteudos ficam em branco.

    Obs: Tentei modificar as abreviasões na query que voce postou,  docClie para documentosClintes e deu erro. Então postei a sua sem modificar. Era para modificar ou não?
  • segunda-feira, 26 de outubro de 2009 21:13R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Mais ninguem pode ajudar?
  • terça-feira, 27 de outubro de 2009 20:10R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    A query funcionou:


    UserId     DocumentoId     HoraupLoad

    1          1               hora e data
    1          1               hora e data
    2          1               hora e data



    Apareceu certinho o resultado, id do usuario com o documento. Só não estou conseguindo recuperar isso no gridView. Recuperar apenas a linha da tabela que representa o documento do usuario.
  • terça-feira, 27 de outubro de 2009 22:25R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Não tem ninguem com  expericencia que possa me explicar/ajudar?
    Acho que a maioria quando começou passou por isso. 142 views e só um para responder.
    • EditadoR. Cacae sexta-feira, 30 de outubro de 2009 1:07
    • EditadoR. Cacae sexta-feira, 30 de outubro de 2009 1:07
    •  
  • quarta-feira, 28 de outubro de 2009 17:52R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    É tão inutil a pergunta, que niguem ajuda, ou da uma dica!
    • Marcado como RespostaR. Cacae quinta-feira, 29 de outubro de 2009 23:27
    • Não Marcado como RespostaR. Cacae sexta-feira, 30 de outubro de 2009 1:06
    •  
  • sexta-feira, 30 de outubro de 2009 1:52Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     RespondidoContém Código
    Cacae, rode apenas esse trecho no seu banco de dados e veja o q te retorna.

    SELECT 
        Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload 
    FROM 
              AspNet_MemberShip  AS Asp
    LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId 
    LEFT JOIN Documentos         AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId 
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como RespostaR. Cacae terça-feira, 3 de novembro de 2009 18:05
    •  
  • sexta-feira, 30 de outubro de 2009 2:04R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Aparece o mesmo resultado da print que esta no meu album. Aparece as  tres colunas, mas só a UserID que fica preenchida as outras fica em branco.



    Agora executando no banco de dados > new query, aparece apenas o UserId preenchido, e as outras colunas NULL
  • sexta-feira, 30 de outubro de 2009 2:09R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Na ultima linha:
    LEFT
     JOIN
     Documentos         AS
     Docs   ON
     DocCli.DocumentoId = Docs.DocumentoId 
    Se eu mudo o LEFT para RIGHT, aparece o ID do documento.
  • sexta-feira, 30 de outubro de 2009 2:15R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Quando eu executo aquela query grande, aparece tudo certinho ate a hora.
  • sexta-feira, 30 de outubro de 2009 2:45Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    R.Cacae, primeiro peço desculpas por não ter explicado corretamente aquela "query grande".
    ela foi apenas um exemplo q postei p/ vc ter uma base de como se faz o join entre as tabelas ali eu criei uma tabela temporária, inseri os valores e depois fiz a ligação entre elas.


    agora, Quanto a só retorna valor na coluna Userid, é devido o fato de estarmos usando o left join para fazer a ligação e pq NÃO HÁ REGISTROS NA TABELA DocumentosClientes  onde tenha ligação com a AspNet_MemberShip,  ou seja os UserId q constam na tabela AspNet_MemberShip não existem na tabela DocumentosClientes  e vise versa.

    SELECT    Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload
    FROM       AspNet_MemberShip  AS Asp
    LEFT JOIN DocumentosClientes  AS DocCli ON Asp.UserId = DocCli.UserId
    LEFT JOIN Documentos               AS Docs   ON DocCli.DocumentoId = Docs.DocumentoId

    não sei se fui muito claro, porém te aconselho a dar uma lida no blog do gustavo maia, lá tem um artigo sobre JOINS.

     




    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
  • sexta-feira, 30 de outubro de 2009 3:17R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Entendi.
    Bom vou dar uma lida no blog.

    Mais o problema é só na parte da instrução SQL correto?
    A parte das tabelas, relacionamento etc, esta certo ?

    Porque se for apenas a instrução o problema, eu vou me aprofundar nisso. Porque ate agora eu estou pesquisando sobre tudo, então se for apenas ela  é um item a menos para me preocupar.
  • sexta-feira, 30 de outubro de 2009 3:28R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Quando eu achar la, eu vou dar uma lida. rsrsss
  • sexta-feira, 30 de outubro de 2009 10:19Leonardo Marcelino Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    mais uma coisa, para acontecer isso tb a falha na relação entre as tabelas.


    Veja tb sobre PRIMARY KEY e FOREIGN KEY
    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
  • sexta-feira, 30 de outubro de 2009 14:39R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    mais uma coisa, para acontecer isso tb a falha na relação entre as tabelas.


    Veja tb sobre PRIMARY KEY e FOREIGN KEY
    A parte de relação entre tabelas eu ja fiz. Esta certo, a unica coisa que eu não tenho certeza se esta certo é:

    Na tabela documentosClientes, eu coloquei UserId como primary key, e DocumentoId como unique key, pelo indexes keys. Ai ficou com duas chaves na tabela, e fico assim, Collumns UserId (DESC), DocumentoId(DESC).
  • terça-feira, 3 de novembro de 2009 18:01R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Bom, se não foi respondido acredito eu, que esta certo.
  • terça-feira, 3 de novembro de 2009 18:05R. Cacae Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Apesar de não ter resolvido o problema, foi a resposta que chegou mais perto, que apareceu algo, não oque tinha mais apareceu.

    Muito obrigado Leonardo pela ajuda e pela tentativa. É uma pena que só tenha eu e você no forum.