Some OleDbDataAdapter datasources do not return Primary Key
information along with the returned data. Since you are using an mdb
(MS Access), it should return the Primary key when you set the
MissingSchemaAction or call the FillSchema method explicitly.
Therefore, I am unsure as to why this doesn't work, but there may be a
couple of things you can look into:

1. Try using only one of the two calls - set the MissingSchemaAction
OR call the FillSchema method. Not both.
2. Confirm that your Access database has a column configured as the
Primary key within the table "NEWB".
3. If nothing works, try setting the Primary key explicitly to the
appropriate column in the following way:

---
Dim newB as DataTable = objDS.Tables("NEWB")
newB.PrimaryKey = new DataColumn() { newB.Columns("MyPrimaryColumn") }
---

On Feb 23, 11:29 pm, Laura <[email protected]> wrote:
> Hi,
>
> I have a database query that I am reading data from into a form. I can
> read one column into a listbox without any problems.
> Where I get into difficulty is when I try to use the data read into
> the listbox to get the related rows.
>
> I keep getting the following error:
>
> "Missing PrimaryKey Was Unhanled Exception"
> "Table doesn't have a primary key"
>
> The query has four fields and one of them is a primary key. Is reading
> from queries very different to reading from tables??
>
> Here is the code I have;
>
> Dim objConnection As New OleDb.OleDbConnection( _
>     "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= FYP.mdb")
> Dim objAbsentNumberDA As New OleDb.OleDbDataAdapter("Select * from
> NEWB", objConnection)
>     Dim objAbsentNumberCB As New OleDb.OleDbCommandBuilder
> (objAbsentNumberDA)
>   Dim strNumber As String
>     Dim StudentName As String
>     Dim ClassName As String
>
> then under the form load;
>
> objAbsentNumberDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
> objDS.Clear()
> objAbsentNumberDA.FillSchema(objDS, SchemaType.Source, "NEWB")
>         objAbsentNumberDA.Fill(objDS, "NEWB")
>
>   lstNumberAbsent.Items.Clear()
>         FillNumberAbsent()
>         FillNamesNeeded()
>
>  Private Sub FillNumberAbsent()
>         Dim i As Integer
>         For i = 1 To objDS.Tables("NEWB").Rows.Count
>             strNumber = objDS.Tables("NEWB").Rows(i - 1).Item
> ("Absent")
>             lstNumberAbsent.Items.Add(strNumber)
>         Next
>     End Sub
>
>     Private Sub FillNamesNeeded()
>         Dim objRow2 As DataRow
>         objRow2 = objDS.Tables("NEWB").Rows.Find(strNumber)
>         StudentName = objRow2.Item("Student")
>
> FillNumberAbsent() works fine. It's in FillNamesNeeded() that I get
> the error at the line: objRow2 = objDS.Tables("NEWB").Rows.Find
> (strNumber)
>
> Am I doing something wrong, or has it something to do with the fact
> that I'm using queries?
>
> Thanks

Reply via email to