Avatar billede krestionsen Nybegynder
28. juli 2004 - 20:04 Der er 7 kommentarer

datagrid og data fra flere tabeller

Jeg har en relationel database i access, hvor jeg har en masse tabeller som er koblet sammen. Så er det jeg gerne vil have en tabel vist i min datagrid, men i den tabel, som jeg gerne vil vise, er der en masse id'er fra andre tabeller, men jeg vil ikke have vist selve iderne, men navnet på det ide fra en anden tabel, men hvordan gør jeg det. Det er ikke noget problem, at få vist selve tabellen i min datagrid, men at få de id'er i tabellen til at vise et navn fra en anden tabel?
Det skal lige siges at datagriden får sine data fra et dataset.

Hvis der er noget der lyder lidt forvirrende, må i lige sige hvad det er, så skal prøve at forklare det lidt bedre.

Eksempel:

System.Data.DataSet datasetMetod(string dato)
    {
        string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\\Fam\\db1.mdb";
        System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
       
        string queryString = "SELECT [Moede].[EmneID], [Moede].[LokalitetID], [Moede].[klientID], [Moede].[Stat" +
        "usID] FROM [Moede] WHERE ([Moede].[Dato] = @Dato)";
        System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand();
        dbCommand.CommandText = queryString;
        dbCommand.Connection = dbConnection;
       
        System.Data.IDataParameter dbParam_dato = new System.Data.OleDb.OleDbParameter();
        dbParam_dato.ParameterName = "@Dato";
        dbParam_dato.Value = dato;
        dbParam_dato.DbType = System.Data.DbType.String;
        dbCommand.Parameters.Add(dbParam_dato);
       
        System.Data.IDbDataAdapter dataAdapter = new System.Data.OleDb.OleDbDataAdapter();
        dataAdapter.SelectCommand = dbCommand;
        System.Data.DataSet dataSet = new System.Data.DataSet();
        dataAdapter.Fill(dataSet);
       
        return dataSet;
    }
Avatar billede thrytter Nybegynder
28. juli 2004 - 20:48 #1
Du skal kigge lidt på sql-ordene INNER JOIN, LEFT JOIN og RIGHT JOIN.

Udtræk af (Klient)Navn fra tabellen Klient kan ske ved:

SELECT
  [Moede].[EmneID],
  [Moede].[LokalitetID],
  [Moede].[KlientID],
  [Moede].[StatusID],
  [Klient].[Navn]
FROM
  [Moede] INNER JOIN
  [Klient] ON [Moede].[KlientID] = [Klient].[Id]
WHERE
  ([Moede].[Dato] = @Dato)

Har desværre ikke tid til en uddybende forklaring.
Avatar billede krestionsen Nybegynder
28. juli 2004 - 22:37 #2
Når jeg bruger "INNER JOIN" kommer den med følgende fejl:
Join expression not supported.
Understøtter access ikke join?
Avatar billede krestionsen Nybegynder
28. juli 2004 - 23:40 #3
Jeg har fået det til at virke det var en fejl i min sql sætning. Kan du ikke lægge et svar så er pointene dine.
Avatar billede krestionsen Nybegynder
29. juli 2004 - 01:22 #4
Hvad gør man, hvis man skal have flere inner join med i en forespørgsel?
Avatar billede thrytter Nybegynder
29. juli 2004 - 06:52 #5
SELECT
  [Moede].[EmneID],
  [Moede].[LokalitetID],
  [Moede].[KlientID],
  [Moede].[StatusID],
  [Klient].[Navn],
  [Lokalitet].[Navn],
  [Status].[Navn]
FROM
  [Moede] INNER JOIN
  [Klient] ON [Moede].[KlientID] = [Klient].[Id] INNER JOIN
  [Lokalitet] ON [Moede].[LokalitetID] = [Lokalitet].[Id] INNER JOIN
  [Status] ON [Moede].[StatusID] = [Status].[Id]
WHERE
  ([Moede].[Dato] = @Dato)

Du skal nok også læse lidt på forskellen mellem INNER JOIN og LEFT JOIN.
Avatar billede krestionsen Nybegynder
29. juli 2004 - 20:41 #6
Jeg har prøvet med 2 inner joins og jeg har testet begge to alene og der virker de fint nok, men hvis jeg har 2 inner joins, så får jeg følgende fejl:

Syntax error (missing operator) in query expression '[Moede].[StatusID] = [Status].[StatusID] INNER JOIN [Emne] ON [Moede].[EmneID] = [Emne].[EmneID]'.


public System.Data.DataSet selectKalender(string dato)
    {
        string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\\Fam\\db1.mdb";
        System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);

        string queryString = "SELECT [Moede].[MoedeID], [Moede].[EmneID], [Emne].[Navn],  [Moede].[StatusID], [Status].[Navn] FROM [Moede]
      INNER JOIN [Status] ON [Moede].[StatusID] = [Status].[StatusID] INNER JOIN [Emne] ON [Moede].[EmneID] = [Emne].[EmneID]  WHERE [Moede].[Dato] = @Dato";

        System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand();
        dbCommand.CommandText = queryString;
        dbCommand.Connection = dbConnection;

        System.Data.IDataParameter dbParam_dato = new System.Data.OleDb.OleDbParameter();
        dbParam_dato.ParameterName = "@Dato";
        dbParam_dato.Value = dato;
        dbParam_dato.DbType = System.Data.DbType.String;
        dbCommand.Parameters.Add(dbParam_dato);

        System.Data.IDbDataAdapter dataAdapter = new System.Data.OleDb.OleDbDataAdapter();
        dataAdapter.SelectCommand = dbCommand;
        System.Data.DataSet dataSet = new System.Data.DataSet();
        dataAdapter.Fill(dataSet);

        return dataSet;
    }
Avatar billede thrytter Nybegynder
29. juli 2004 - 22:27 #7
Fejlen skyldes at Access syntaksen forINNER JOIN's er anderledes end i MS-SQl.

Du får lige en ny en:

SELECT
  [Moede].[MoedeId],
  [Moede].[EmneId],
  [Moede].[StatusId],
  [Emne].[Navn] As EmneNavn,
  [Status].[Navn] As StatusNavn
FROM
  [Status] INNER JOIN
  (
    [Emne] INNER JOIN
    [Moede] ON [Emne].[EmneId] = [Moede].[EmneId]
  )
  ON [Status].[StatusId] = [Moede].[StatusId]
WHERE
  [Moede].[Dato] = @Dato

Du kan/bør teste dine sql-sætninger i en Access forespørgsel inden indsættelse i koden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester