update vom dataset aus 2 tables

hallo,

ich habe ein datagrid zu Ansicht von ID(int),Name(text), Firma(text) und invit_print(bool).
Wobei Name und Vorname aus dem table contact kommt und Firma aus table company.

  Dim sql As String = "SELECT " & _
                          "ct.contact_id, ct.name_last, cp.company, ct.invite_print" & _
                          " FROM contact ct LEFT JOIN company cp" & _
                          " ON ct.company_id = cp.company_id" & _
                          " ORDER BY name_last ASC;"

nun möchte ich nach ändern des, z.B. Boolschen Wertes invite_print aller angezeigten Objekte updaten.
Es folgt eine Fehler:
column “company” does not exist, was mir eigentlich einleuchtet.

gibt es eine Lösung, oder funktioniert die updatefunktion nur mit einer tabelle im datagrid (dataset)


vielen Dank
Frank

Du zeigst uns ein SELECT und dazu eine Fehlermeldung eines UPDATE. Das ist zwar nett, aber für uns ist es nun schwer zu erraten, warum der Fehler kommt.

gibt es eine Lösung, oder funktioniert die updatefunktion nur mit einer tabelle im datagrid (dataset)


vielen Dank
Frank

Bestimmt, nur komme ich mit Deinen Begriffen nicht wirklich klar.

Vielleicht hilft Dir ja folgendes weiter:

scholl=# select * from master;
 id | name
----+-------
  1 | name1
  2 | name2
(2 rows)

scholl=*# select * from slave;
 master_id |  name
-----------+--------
         2 | slave2
(1 row)

scholl=*# update master set name = slave.name from slave where master.id=slave.master_id;
UPDATE 1
scholl=*# select * from master;
 id |  name
----+--------
  1 | name1
  2 | slave2
(2 rows)

Andreas

Hallo,

hier die Methode, wo ich ein dataset kreiere und diesen zu einem datagridview binde.

Try
      ds_Contact.Reset()
      Me.WindowState = FormWindowState.Maximized

      Dim sql As String = "SELECT " & _
                          "ct.contact_id, ct.name_last, cp.company, ct.invite_print" & _
                          " FROM contact ct LEFT JOIN company cp" & _
                          " ON ct.company_id = cp.company_id" & _
                          " ORDER BY name_last ASC;"
      Dim cmd As Npgsql.NpgsqlCommand = New Npgsql.NpgsqlCommand(sql, NpgConn)
      cmd.CommandType = CommandType.Text
      da_Contact = New Npgsql.NpgsqlDataAdapter(cmd)
      Dim cb_Contact = New Npgsql.NpgsqlCommandBuilder(da_Contact)
      ds_Contact = New DataSet()
      da_Contact.Fill(ds_Contact)
      DataGridView1.DataSource = ds_Contact.Tables.Item(0)  ' Bindung Datagrid an die Tabelle

      btnSave.Visible = True

      DataGridView1.Refresh()
    Catch ex As Npgsql.NpgsqlException ' catches only Oracle errors
      MsgBox(ex.Message)

    End Try

Ich zeige im Datagrid 2 Spalten aus der Tabelle contact (id, name) und eine Spalte aus company (company).

Hier die Update Metode

   Try

      da_Contact.Update(ds_Contact.Tables(0))
      BuildDataset()
    Catch ex As Npgsql.NpgsqlException
      MsgBox(ex.Message & " Please change in to the 'Edit Table' mode !")
      BuildDataset()
    End Try

hiermit möchte ich die aktuelle Datagridsituation updaten.

vielen Dank

Gruss
Frank

weiss denn keiner Rat?

Es sieht immer noch so aus, als ob die Tabelle “company” keine Spalte “company” hat.

doch hat sie, leider ist mir zu spät aufgefallen, das die Splate den selben Namen hat wie di Tabelle selber und siht etwas verwirrend aus.

ich schätze mal das es hierfür keine Möglichkeit gibt aus dem Datagridview(VB) zwei Tabellen gleichzeitig upzudaten

Danke
Farnk

Hi,

fange gerade an mich mit dem Thema zu befassen und sehe 2 Moglichkeiten:
1 Der pgsql-weg
Definiere eine view die beide Tabellen umfasst mit entsprechenden Regeln für Update/Insert/Delete
2. Der .NET-Weg
Dafür gibt es in .NET die Konzepte der DataSets und der entsprechenden Relationen zwischen DataTable-Objekten.

Wenn du nicht für verschiedene DBMS entwickeln mußt, würde ich den pgsql-weg gehen.

Freundliche Grüße
hkocam