WinFuture-Forum.de: Ado Steuerelement - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Ado Steuerelement Zugriff auf geschlossenes Objekt


#1 Mitglied ist offline   Scout One 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 23. Juni 05
  • Reputation: 0

geschrieben 01. September 2005 - 12:22

hi

hab n Ado Objekt was auch soweit gut funktioniert .. aber sobald ich per SQL was in die tabelle einfügen will, dann sagt das ding " Zugriff auf ein geschlossenes Objekt nicht möglich!" das tut er sobald er die Refresh() methode betritt ...

die anweisung wird zwar ausgeführt .. dh er erstellt das was er soll.. aber diese meldung stört ... weil er die nachfolgenden anweisungen nicht mehr ausführt

habe diese methode aber vorher schon benutzt und da hat es gefuntzt

Dieser Beitrag wurde von Scout One bearbeitet: 01. September 2005 - 12:25

0

Anzeige



#2 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

  geschrieben 01. September 2005 - 13:48

Was für ein Ado - Objekt benutzt du?
Werden Steuerelemente an die Datenquelle gebunden?

Am besten postest du mal den Quellcode auf den es ankommt.
0

#3 Mitglied ist offline   Scout One 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 23. Juni 05
  • Reputation: 0

geschrieben 01. September 2005 - 21:54

Nennt sich ADOdc
hab die datenbank als connection string eingebunden ...
normale abfragen funktionieren auch .. aber UPDATE oder INSERT abfragen bringen eine fehlermeldung... sie führen ihren code zwar aus .. sagen jedoch das der zugriff auf ein geschlossenes objekt nicht möglich sei.


das objekt ist die datenbank .. aber ich weiß nicht wie ich die sonst noch öffnen sollte....

jepp.. hab noch 2 Datagrids angebunden .... und beide sind für usereingaben gespeerrt .. aber das kann sich ja nciht so auswirken oder ?

Dieser Beitrag wurde von Scout One bearbeitet: 02. September 2005 - 10:15

0

#4 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

geschrieben 02. September 2005 - 12:17

Hi,

habe mal einen Testprogramm für die Northwind-Datenbank geschrieben über das ich wie folgt einen neuen Datensatz einfüge:

  Dim cmd As ADODB.Command
  Set cmd = New ADODB.Command
  
  Set cmd.ActiveConnection = Adodc1.Recordset.ActiveConnection
  cmd.CommandText = "Insert into Products (ProductName) values ('Mein Produkt')"
  cmd.Execute
  Adodc1.Recordset.Requery


Funktioniert prima.
Wie führst du die Aktionsabfragen durch?
0

#5 Mitglied ist offline   Scout One 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 23. Juni 05
  • Reputation: 0

geschrieben 05. September 2005 - 11:27

jo.. ähm.... ich mach das ... mit

GetDlgItem(IDC....)->RecordSource("INSERT ........");
GetDlgItem(IDC....)->Refresh();

und beim refreshen da kommt der fehler



ähm... das was du da hast ist VB ..... ich brauch C++.NET 2002

Dieser Beitrag wurde von Scout One bearbeitet: 05. September 2005 - 11:30

0

#6 Mitglied ist offline   Scout One 

  • Gruppe: aktive Mitglieder
  • Beiträge: 67
  • Beigetreten: 23. Juni 05
  • Reputation: 0

  geschrieben 08. September 2005 - 10:52

also ...

die datendank hat 2 tabelen ... je tabelle hab ich ein ado objekt und ein datagrid.

wenn ich nun per
UpdateData(TRUE);
	int iCounter = 0;
	CTime tTime = tTime.GetCurrentTime();  //   tTime.Format("%d.%m.%Y  %H:%M:%S")     gibt das richtige format
	if((m_strSachNr.GetLength() >8) && (m_strGerStand.GetLength() >0) && (m_iMenge >0) &&
  (m_strMaterialNr.GetLength() > 0) && (m_strMaterialBeschreibung.GetLength() >0) &&
  (m_strPruefer.GetLength() > 8))
	{
  CString BackupOfRecordSource = "";
  GenerateNextAuftragsNr();
  BackupOfRecordSource = m_ctlAdoAuftragsnummer.get_RecordSource();
  m_ctlAdoAuftragsnummer.put_RecordSource("SELECT COUNT(*) FROM Auftragsnummer WHERE Auftragsnummer = '" + m_strAuftragsNr + "'");
  m_ctlAdoAuftragsnummer.Refresh();
  if(atoi(m_ctlListAuftragsnummer.get_Text())>0)
  {
 	 m_ctlAdoAuftragsnummer.put_RecordSource("SELECT * FROM Auftragsnummer WHERE Auftragsnummer = '" + m_strAuftragsNr + "'");
 	 m_ctlAdoAuftragsnummer.Refresh();
 	 MessageBox("Es existiert bereits ein Eintrag mit dieser Auftragsnummer !","Auftragsnummer existiert bereits!",MB_ICONEXCLAMATION | MB_OK);
  }
  else
  {
 	 char Buffer[30];
 	 CString strMenge = "";
 	 CString strSeriennummer = "";
 	 m_ctlAdoAuftragsnummer.put_RecordSource("SELECT * FROM Auftragsnummer WHERE Auftragsnummer = '" + m_strAuftragsNr + "'");
 	 m_ctlAdoAuftragsnummer.Refresh();
 	 itoa(m_iMenge,Buffer,10);
 	 strMenge = (CString)Buffer;
 	 CString strNewRecordSource = "INSERT INTO Auftragsnummer (Auftragsnummer,";
 	 strNewRecordSource = strNewRecordSource +
    "Freigabedatum,Materialnummer,Sachnummer,Matria
lkurzzeichen,Menge,Mengeneinheit," +
    "Gerätestand,Ausgabestand) VALUES ('" + m_strAuftragsNr + "','" +
    tTime.Format("%d.%m.%Y  %H:%M:%S") + "','" + m_strMaterialNr + "','" + m_strSachNr +
    "','" + m_strMaterialBeschreibung + "','" + strMenge + "','St.','" + m_strGerStand + 
    "',' ')";
 	 m_ctlAdoAuftragsnummer.put_RecordSource(strNewRecordSource);
 	 // durch die try catch  kommt zwar die meldung, jedoch geht das programm weiter
 	 try{
    m_ctlAdoAuftragsnummer.Refresh();
 	 }
 	 /*Eine Ausnahme (erste Chance) bei 0x7c59bbf3 in Etiketten.exe: Microsoft C++ exception: COleDispatchException @ 0x0012eab4.
 	 Warning: Uncaught exception in WindowProc (returning 1).*/
 	 // Ein Neuer Eintrag in der Auftragsnummern Tabelle wurde erstellt
 	 catch(...){
 	 }
 	 for(iCounter = 1;iCounter <= m_iMenge; iCounter++)
 	 {
    char Buffer[30];
    CString strEndeDerSeriennummer = "";
    int iLaengeVomEnde = 0;
    itoa(iCounter,Buffer,10);
    strEndeDerSeriennummer = (CString)Buffer;
    iLaengeVomEnde = 3 - strEndeDerSeriennummer.GetLength();
    for(iLaengeVomEnde;iLaengeVomEnde>0;iLaengeVomEnde--)
    {
   	 strEndeDerSeriennummer = "0" + strEndeDerSeriennummer;
    }
    strSeriennummer = m_strAuftragsNr;
    strSeriennummer.Delete(0,4);
    strSeriennummer = strSeriennummer + "-" + strEndeDerSeriennummer;
    strNewRecordSource = "";
    strNewRecordSource = strNewRecordSource + "INSERT INTO Seriennummer (Seriennummer," +
   	 "Auftragsnummer,Projekt,Interner_Code,Druck_Sac
hnummer,Datum,Prüfer)VALUES ('" +
   	 strSeriennummer + "','" + m_strAuftragsNr + "','Pool',' ',' ','" +
   	 tTime.Format("%d.%m.%Y  %H:%M:%S") + "','" + m_strVorgang + "')";
    //MessageBox(strNewRecordSource);
    m_ctlAdoSeriennummer.put_RecordSource(strNewRecordSource);
    try{
   	 m_ctlAdoSeriennummer.Refresh();
    }
    catch(...){}
 	 }


neue einträge erstellen will, dann sagt er " zugriff ist auf ein geschlossenes objekt nicht möglich .

das ado objekt hat aber keine open methode .....
weiß nicht was ich noch öffnen sollte

wie kann ich denn eigentlich eine Messagebox unterdrücken , so das diese meldung nicht mehr angezeigt wird?
:huh:
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0