GrAmLin
Legacy Member
Dag Mensjes!
Ik zit met een klein probleem,
Ik ben een programma aan het schrijven voor mijn dvds te ordenen, maar zit met een klein probleem.
Ik werk met een access database waar ik de data opsla in een dataset, alles werkt, maar als ik in mijn mdi form klik op een "filmnaam" (bv The Matrix) dan gaat er een nieuwe form open met het detail van die bepaalde film. Ik zend een dataset door met dat bepaalde record, dus bij het openen naar het nieuwe form.
myDB = new AccesDb(myGlobels.path.ToString()); // dat myglobels is het path naar de access db)
Maar als ik dan weer op een andere film wil klikken, en en dus er weer info uit de dataset moet gehaald worden dan lukt dit niet meer, dan is hij die dataset kwijt. Dit werkt dus één keer en nadien niet meer.
Ik heb wel in het detail scherm die bepaalde classe van mijn databese opnieuw aangemaakt, ik denk dat hij daar zijn data kwijt is.
private void detail_Load(object sender, EventArgs e)
{
myGlobels = new Globals(); // HIER LOOPT HET DENK IK MIS
myDB = new AccesDb(myGlobels.path.ToString()); // HIER LOOPT HET DENK IK MIS
myDB.initDataset("genres", "SELECT * FROM db_genres"); // initalizeren
myDB.fillDataset("genres", "SELECT * FROM db_genres ORDER BY genre");
foreach (DataRow dr in myDB.DS.Tables["genres"].Rows)
{
cbGenre.Items.Add(dr["genre"].ToString());
}
string strNaam = myDS_item.Tables["dvds_selected"].Rows[0]["naam"].ToString();
textBox1.Text = strNaam;
this.Text = strNaam;
}
Het ideale zou zijn dat ik een classe kan "delen" over al mijn forms die ik open doe. Zodat de waarden opgeslaan worden.
Daar had ik gedacht aan een static class, maar wete niet juist hoe dit werkt, of bestaan er nog andere mogelijkheden om een classe public te maken over al de forms. zonder ze telkens opnieuw te moeten initializeren?
Dit is een deel van mijn classe,
namespace dvdlister.classes
{
class AccesDb
{
public OleDbConnection dbCon;
public OleDbCommand dbCmd;
public OleDbDataAdapter dbDa;
public OleDbDataReader dbDr;
public static DataSet ds;
public DataTable dt;
public DataRow dr;
public string constr;
public AccesDb()
{
constr = "provider = microsoft.jet.oledb.4.0; data source=" +
@"C:\temp\films.mdb";
initmdb();
}
public AccesDb(string mdb) // deze roep ik aan
{
constr = "provider = microsoft.jet.oledb.4.0; data source=" + mdb;
initmdb();
}
public void initmdb()
{
try
{
dbCon = new OleDbConnection();
dbCon.ConnectionString = constr;
dbCmd = new OleDbCommand();
dbCmd.Connection = dbCon;
dbDa = new OleDbDataAdapter(dbCmd);
ds = new DataSet();
//uitbreidbaar met andere initialisaties dr; dt; reader; ...
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initmdb " + x.Message);
}
}
public void initDataset(string tabelNm, string sql)
{
try
{
sql = sql.Replace(";", "");
dbCmd.CommandText = sql + " where 1 = 0";
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initds " + tabelNm +
": " + x.Message);
}
}
public void initDataset_free(string tabelNm, string sql)
{
try
{
sql = sql.Replace(";", "");
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initds " + tabelNm +
": " + x.Message);
}
}
public void fillDataset(string tabelNm, string sql)
{
try
{
ds.Tables[tabelNm].Clear();
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout fillds " + tabelNm +
": " + x.Message);
}
}
public void fillDataset(string tabelNm, string sql, bool isnew)
{
try
{
if (!isnew) ds.Tables[tabelNm].Clear();
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout fillds " + tabelNm +
": " + x.Message);
}
}
public void doNonQuery(string sql)
{
try
{
dbCon.Open();
dbCmd.CommandText = sql;
dbCmd.ExecuteNonQuery();
dbCon.Close();
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout nonquery " + x.Message);
}
finally
{
dbCon.Close();
}
}
public ConnectionState status()
{
return dbCon.State;
}
public DataSet DS
{
get { return ds; }
set { }
}
}
}
Ik moet denk ik die classe public maken + static.
Hmzz, kan er iemand helpen?
Met vriendelijke groeten!

Ik zit met een klein probleem,
Ik ben een programma aan het schrijven voor mijn dvds te ordenen, maar zit met een klein probleem.
Ik werk met een access database waar ik de data opsla in een dataset, alles werkt, maar als ik in mijn mdi form klik op een "filmnaam" (bv The Matrix) dan gaat er een nieuwe form open met het detail van die bepaalde film. Ik zend een dataset door met dat bepaalde record, dus bij het openen naar het nieuwe form.
myDB = new AccesDb(myGlobels.path.ToString()); // dat myglobels is het path naar de access db)
Maar als ik dan weer op een andere film wil klikken, en en dus er weer info uit de dataset moet gehaald worden dan lukt dit niet meer, dan is hij die dataset kwijt. Dit werkt dus één keer en nadien niet meer.
Ik heb wel in het detail scherm die bepaalde classe van mijn databese opnieuw aangemaakt, ik denk dat hij daar zijn data kwijt is.
private void detail_Load(object sender, EventArgs e)
{
myGlobels = new Globals(); // HIER LOOPT HET DENK IK MIS
myDB = new AccesDb(myGlobels.path.ToString()); // HIER LOOPT HET DENK IK MIS
myDB.initDataset("genres", "SELECT * FROM db_genres"); // initalizeren
myDB.fillDataset("genres", "SELECT * FROM db_genres ORDER BY genre");
foreach (DataRow dr in myDB.DS.Tables["genres"].Rows)
{
cbGenre.Items.Add(dr["genre"].ToString());
}
string strNaam = myDS_item.Tables["dvds_selected"].Rows[0]["naam"].ToString();
textBox1.Text = strNaam;
this.Text = strNaam;
}
Het ideale zou zijn dat ik een classe kan "delen" over al mijn forms die ik open doe. Zodat de waarden opgeslaan worden.
Daar had ik gedacht aan een static class, maar wete niet juist hoe dit werkt, of bestaan er nog andere mogelijkheden om een classe public te maken over al de forms. zonder ze telkens opnieuw te moeten initializeren?
Dit is een deel van mijn classe,
namespace dvdlister.classes
{
class AccesDb
{
public OleDbConnection dbCon;
public OleDbCommand dbCmd;
public OleDbDataAdapter dbDa;
public OleDbDataReader dbDr;
public static DataSet ds;
public DataTable dt;
public DataRow dr;
public string constr;
public AccesDb()
{
constr = "provider = microsoft.jet.oledb.4.0; data source=" +
@"C:\temp\films.mdb";
initmdb();
}
public AccesDb(string mdb) // deze roep ik aan
{
constr = "provider = microsoft.jet.oledb.4.0; data source=" + mdb;
initmdb();
}
public void initmdb()
{
try
{
dbCon = new OleDbConnection();
dbCon.ConnectionString = constr;
dbCmd = new OleDbCommand();
dbCmd.Connection = dbCon;
dbDa = new OleDbDataAdapter(dbCmd);
ds = new DataSet();
//uitbreidbaar met andere initialisaties dr; dt; reader; ...
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initmdb " + x.Message);
}
}
public void initDataset(string tabelNm, string sql)
{
try
{
sql = sql.Replace(";", "");
dbCmd.CommandText = sql + " where 1 = 0";
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initds " + tabelNm +
": " + x.Message);
}
}
public void initDataset_free(string tabelNm, string sql)
{
try
{
sql = sql.Replace(";", "");
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout initds " + tabelNm +
": " + x.Message);
}
}
public void fillDataset(string tabelNm, string sql)
{
try
{
ds.Tables[tabelNm].Clear();
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout fillds " + tabelNm +
": " + x.Message);
}
}
public void fillDataset(string tabelNm, string sql, bool isnew)
{
try
{
if (!isnew) ds.Tables[tabelNm].Clear();
dbCmd.CommandText = sql;
dbDa.Fill(ds, tabelNm);
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout fillds " + tabelNm +
": " + x.Message);
}
}
public void doNonQuery(string sql)
{
try
{
dbCon.Open();
dbCmd.CommandText = sql;
dbCmd.ExecuteNonQuery();
dbCon.Close();
}
catch (Exception x)
{
System.Windows.Forms.MessageBox.Show("fout nonquery " + x.Message);
}
finally
{
dbCon.Close();
}
}
public ConnectionState status()
{
return dbCon.State;
}
public DataSet DS
{
get { return ds; }
set { }
}
}
}
Ik moet denk ik die classe public maken + static.
Hmzz, kan er iemand helpen?
Met vriendelijke groeten!
