thermomixer Posted April 14, 2008 Posted April 14, 2008 Sziasztok! Kezdõ Visual Studio 2008 felhasználó vagyok és a következõ problémába ütköztem: három különbözõ adatbázisból kell lekérdeznem adatokat, úgy, hogy egy rekordnak akár mind a 3 különbözõ adatbázisban vannak adatai. Konkrétan: adatbázis1-ben találhatók a termék tulajdonságai(termékkód, terméknév, stb), adatbázis2-ben találhatóak a termék beszerzési adatai (termékkód, beszerzési ár, stb.) Nekem olyan lekérdezés kell, amelyben lekérem a termék kódját, nevét, beszerzési árát, vagyis két táblát kell kapcsolnom, amelyek nem azonos adatbázisban találhatóak. Így próbálkoztam: Egy meglévõ DataGridView DataSet-jén jobb klikk-> Edit DataSet Designer. Itt találhatóak a tábláim az egyik adatbázisból. A táblák alatti területen jobb klikk -> Add Table Adapter. Ennek a táblának beállítottam úgy a tulajdonságait, hogy egy a másik adatbázisban található adattábla mezõi jelenjenek meg. Így itt találhatóak (a Dataset Designerben) az adatbázis1 adattábla1 és az adatbázis2 adattábla1 táblái, amelyeket össze is kötöttem a tételkóddal. Innentõl viszont már nem tudom, hogyan írjam meg a lekérdezésemet. A táblák alatti részen jobb klikk-> Add Query / Add Table Adapter, stb.t kipróbáltam, de sehol nem találtam lehetõséget arra, hogy ezen két tábla adatait egy lekérdezésben lekérjem. Másik dolog, ettõl függetlenül próbálkoztam ConnectionStringgel, de a fordító hibásnak találja a String paramétereit: Private m_cnADONetConnection As New OleDb.OleDbConnection m_cnADONetConnection.ConnectionString = _ "Provider=SQLOLEDB;Dsn=elesq;host=server;port=elesq-sv;db=eles_q;uid=dbname;pwd=xxx" connection.Open() Elõre is köszönöm a segítõ válaszokat! Thermo
mohacsi Posted April 15, 2008 Posted April 15, 2008 Szia! Munkám során használok én is olyan lekérdezést, amely több MSSQL adatbázisból olvas adatokat, de ezt az ADATBAZIS.dbo.TABLANEV séma használatával meg tudod oldani egy lekérdezésen belül. Pl: SELECT t1.*,t2.* FROM ADATBAZIS1.dbo.TABLA t1 INNER JOIN ADATBAZIS2.dbo.TABLA t2 ON(t2.OSZLOP=t1.OSZLOP).... Üdv.: MOHI.
thermomixer Posted April 15, 2008 Author Posted April 15, 2008 Szia! Ezt már próbáltam, mielõtt még ide írtam volna, de most hogy írtál, megpróbáltam sokféle változatban beírni a query builderbe, majd végül erre egyszerûsítettem: SELECT * FROM eles_q.dbo.pt_mstr illetve SELECT * FROM eles_q.pub.pt_mstr egyik sem jó, ezt fogadja el: SELECT * FROM pub.pt_mstr Ahogy már írtam, a dataset.xsd-n kattintok jobb gombbal, és itt add->table adapter-t adok hozzá. Ezzel a módszerrel csak egy adatbázisba nyúlhatok bele, szóval vszínûleg nem jó a módszerem. Kísérlet képpen azért megpróbáltam adatbázis2 tábla1 mezõit lekérni, habár adatbázis1hez csatlakoztam a tableadapterrel, természetesen nem ment. Viszont a dataset.xsd-n létrehozhatok egy tableadapter1-et, amely tartalmazza adatbázis1 tábla1 tábláját és egy tableadapter2-t, amely tartalmazza adatbázis2 tábla2 tábláját, ezek grafikusan összeköthetõek, de lekérdezést nem tok rá írni.
thermomixer Posted May 19, 2008 Author Posted May 19, 2008 Sziasztok! Az alap probléma az, hogy van két külön adatbázisom. Az egyikben van egy adattábla (pt_mstr), amely a termék alapadatait tartalmazza. A másik adatbázisban található dlot_mstr adattábla, amely a termék beszerzési árát tartalmazza. A két táblát pt_part, vagyis a termékkód köti össze. A két tábla adatait VB-s adattáblákba töltöm, de innen nem tudom, hogyan tovább. A datarelation-os részig minden működik, data relation nélkül meg tudom jeleníteni az adatokat egy gridben, tehát az adatbázissal való kapcsolat jó, már csak az a kérdés, hogyan kell a VB-s adattáblákat összekötni egymással. A könyv szerint a datarelation datasettel épp erre való, de nekem nem működik, "Object reference not set to an instance of an object" hibaüzit kapom abban a sorban, melyben ptColumn-nak értéket adok(félkövérrel a kódban). Tudnátok segíteni? Dani Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conn_q As New Odbc.OdbcConnection Dim conn_s As New Odbc.OdbcConnection Dim pt_mstr_dataAdapter As Odbc.OdbcDataAdapter Dim pt_mstr_Datatable As New DataTable Dim dlot_mstr_dataAdapter As Odbc.OdbcDataAdapter Dim dlot_mstr_Datatable As New DataTable Dim DataSet11 As New DataSet() conn_q.ConnectionString = "DSN=elesq;DB=eles_q;UID=s;PWD=x;HOST=x;PORT = elesq-sv" conn_s.ConnectionString = "DSN=elesq;DB=eles_s;UID=s;PWD=x;HOST=x;PORT = eless-sv" Dim cmd_q As New Odbc.OdbcCommand Dim cmd_s As New Odbc.OdbcCommand cmd_q.Connection = conn_q cmd_s.Connection = conn_s cmd_q.CommandText = "select PUB.pt_mstr.pt_part from PUB.pt_mstr" cmd_s.CommandText = "select PUB.dlot_mstr.dlot_part from PUB.dlot_mstr" Try conn_q.Open() conn_s.Open() pt_mstr_dataAdapter = New Odbc.OdbcDataAdapter(cmd_q) dlot_mstr_dataAdapter = New Odbc.OdbcDataAdapter(cmd_s) 'commandBuilder = New SqlCommandBuilder(ugyfelek_dataAdapter) Catch ex As Exception MsgBox(ex.Message) Exit Sub End Try pt_mstr_dataAdapter.Fill(pt_mstr_Datatable) dlot_mstr_dataAdapter.Fill(dlot_mstr_Datatable) DataSet11.Clear() pt_mstr_dataAdapter.Fill(DataSet11) dlot_mstr_dataAdapter.Fill(DataSet11) Dim ptColumn As New DataColumn() Dim dlotColumn As New DataColumn() ptColumn = DataSet11.Tables("pt_mstr").Columns("pt_part") dlotColumn = DataSet11.Tables("dlot_mstr").Columns("dlot_part") Dim kapcsolat As DataRelation kapcsolat = New DataRelation("kapcsolat", ptColumn, dlotColumn) DataSet11.Relations.Add(kapcsolat) Me.DataGridView1.DataSource = DataSet11 'Me.DataGridView1.DataSource = pt_mstr_Datatable conn_q.Close() End Sub
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now