Laden...

Forenbeiträge von chanderegg Ingesamt 101 Beiträge

12.02.2013 - 10:58 Uhr

verwendetes Datenbanksystem: SQLServer2008

Hallo zusammen

Ich möchte eine bestehende Datenbank optimieren. Dazu erstelle ich als erstes Primary Keys.
Nun habe ich eine Tabelle mit 3 Spalten, welche alle Unique sind. Ist es nun besser den Primary Key auf eine Spalte zu definieren und über die beiden anderen einen Index zu legen oder soll ich den Primary Key über alle 3 Spalten definieren?

Vielen Dank für Eure Hilfe
chanderegg

25.10.2011 - 12:58 Uhr
//speichert die aktuellen Spracheinstellungen und öffnet das Excel mit Sprache en-US
            CultureInfo Culterinfo = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

            try
            {
                //Notwendigen Excel-Objects werden instanziert
                Workbook xlWorkbook = xlApp.Workbooks.Open(dfsDatei.Text, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", true, false, 0, true, 1, 0);
                Worksheet xlWorksheet = (Worksheet)xlWorkbook.Worksheets.get_Item(1);
                Range xlZellen;  
             }

So öffne ich das Excel. Ich kann das Excel aber nicht mit xls/xlsx speichern, da der Benutzer nachher selber einen Pfad und Dateinamen angeben soll.

25.10.2011 - 11:46 Uhr

Hallo zusammen

Ich habe eine Excel-Vorlage geöffnet und mit Daten abgefüllt. Nun habe ich festgestellt, dass beim 'speichern unter' als Endung immer noch die Vorlage (xlt/xltx) genommen wird.
Wenn ich aber die Vorlage im Windows mit doppel Klick öffne so kommt beim 'speichern unter' die richtige Endung (xls/xlsx).

Kann mir jemand sagen, wie ich dieses Verhalten herstellten kann, wenn ich die Datei via mein Programm öffne?

Vielen Dank für eure Hilfe

chanderegg

19.09.2011 - 15:38 Uhr

habe ich mir auch schon überlegt aber wo setz ich dann den radiobutton neu. ich weiss ja nicht welcher event als nächstes kommt.

hab leider keine ahnung was ein toggle-button ist aber ich benütze das hier RadioButton.checked

19.09.2011 - 15:19 Uhr

Danke für die schnelle Antwort. Ich sehe aber 2 Probleme dabei.

  1. isChecked ist eine Methode. Ich müsste also checked nehmen.
  2. Die neue Methode DeSelect müsste nach der Auswahl eines RadioButtons durchgeführt werden. Das heisst der checkedChanged-Event wirft die Mehtode. Dort habe ich dann wieder das gleiche Problem, dass ich die Methode nicht abbrechen und erst einen neuen RadioButton anwählen kann, wenn der Event fertig ist
19.09.2011 - 14:46 Uhr

Hallo zusammen

Ich habe ein Programm gschrieben, in welchem es 4 RadioButtons gibt. 3 davon sind für den User sichtbar.
Nun möchte ich, dass der User einen der 3 auswählt. Falls aber die Vorbedingungen nicht stimmen, möchte ich, dass der Event abgebrochen wird und wieder der 4 (unsichtbare) RadioButton angewählt wird.

Leider ist es nun so, dass ich keine Möglichkeit finde den Event zu stoppen (keine .Cancel-Methode). Im Netz wird davon gesprochen, dass man den OnCheckedChanged-Event der Basisklasse überschreiben soll. Ich kann dies aber leider nicht machen, da wir bestimmte Standartcontrols verwenden müssen.

Weiss vielleicht sonst noch jemand einen Lösungsweg?

Vielen Dank für Eure Hilfe

24.05.2011 - 17:08 Uhr

Hallo zusammen

Ich habe ein Programm geschrieben, welches Parameter in ein Excel abfüllt und danach eine SQL-Abfrage startet. Es funktioniert eigentlich einwandfrei bis einer unsere Supporter das ganze ein bisschen einfacher gestalten wollte.
Er hat neben dem Feld eines Parameters eine Formel eingefügt, welche, falls das Feld leer bleibt, einen Standartwert einfügt. So kann das gleiche Query für eine spezifische und eine allgemeine Version verwendet werden.

Beispiel:
Ich fülle mit meinem Programm die Zelle B4 ab. Nun hat er in der Zelle C4 eine Formel "IF(B4 = ''; '1'; B4)" eingefügt und das Query mit der Zelle C4 verknüpft.

Leider kriege ich jetzt jedes 2. mal einen rpc_e_call_rejected Fehler. Bei meiner Internetrecherche habe ich verschiedenste (zum Teil abstruse) Probleme anderer Entwickler und dessen Lösung gesehen, aber bezüglich meinem Problem leider nichts.

Weiss jemand, ob es dafür einen Workaround gibt und wieso dies nur jedes 2. mal auftritt?

Vielen Dank für Eure Infos

22.03.2011 - 15:06 Uhr

Hallo zusammen

Ich öffne via c# ein Excel in welchem auf dem 2. Tab ein bereits existierendes Querytable ist.
Nachdem ich die Parameter angepasst habe, möchte ich nun dieses Table aktualisieren.
Ich habe dazu im Internet auch schon den richtigen Code (hoffentlich) gefunden. Leider sehe ich aber das Table gar nicht.

Hat jemand eine Idee, wie ich das bereits existierende Table aktualisieren kann?

Vielen Dank

hier mein Code:


//zuerst füll ich die Wete in den Tab 1 und dann möchte ich auf dem 2. Tab die aktualisierung machen
xlWorksheet = (Worksheet)xlWorkbook.Worksheets.get_Item(2);

            QueryTables xlQueryTables = xlWorksheet.QueryTables;

            //Count ist immer gleich 0
            if (xlQueryTables.Count > 0)
            {
                for (int i = 1; i <= xlQueryTables.Count; i++)
                {
                    if (!xlQueryTables[i].Refresh(System.Reflection.Missing.Value))
                    {
                        MessageBox.Show("Refresh of query table " +
                            xlQueryTables[i].Name + " failed.");
                    }
                }
            }

10.02.2011 - 11:34 Uhr

Ich würd dir vorschlagen das ganze mit einer Transaction zu machen


using (OracleConnection myConnection = new OracleConnection())
                {
                    myConnection = AGB70.PABS.Common.Var.gblDBInfo.GetDbConnection();
            myConnection.Open();

            //Definiert den Start einer Übertragung
            myTransaction = myConnection.BeginTransaction(); //vielleicht noch isolationslevel hinzufügen

            //Erstellt ein Commandobjekt, welches die SQL-Statements ausführt
            myCommand = AGB70.PABS.Common.Var.gblDBInfo.GetDbCommand();
            mytCommand.Connection = myConnection;
            mytCommand.Transaction = myTransaction;
}

so kannst du schlussendlich mit rollback alles rückgängig machen


if (sys_cancel)
{
 myTranscation.Rollback();
}

ps. am schluss nicht den commit vergessen

03.02.2011 - 10:21 Uhr

Ok ich habe noch ein bisschen nachgeforscht.
Ich konnte nun herausfinden, dass das Custom Tool wohl den Fehler verursacht.
Dazu habe ich folgende Fehlermeldung: Custom tool error: Failed to generate code. Exception of type 'System.data.Design.InternalException' was thrown

Ich habe dabei festgestellt, dass die Datei PABSDataSet.Designer.cs gelöscht wird und mit dem Tool neu erstellt werden sollte. Beim erstellen muss dann der Fehler auftreten. Dazu passt auch, dass die Datei PABSDataSet.cs wie folgt aussieht:

namespace AGB70.PABS.BT2PABS.DataImport {
    
    
    public partial class PABSDataSet {
        partial class PS001DataTable
        {
        }
    
        partial class PA001DataTable
        {
        }
    }
}

namespace AGB70.PABS.BT2PABS.DataImport.PABSDataSetTableAdapters {
    
    
    public partial class PS001TableAdapter {
    }
}

Dabei hat es noch verschiedene Andere Tabellen und weitere Adapter. Zudem fehlt der PA001 Adapter.

@Th69: Wie sehe ich, ob die aktuellsten .xs-Dateien verwendet wurden? Die Konvertierung hat mein Chef gemacht und ich habe die Solution vor dem Start 'geupdatet'

02.02.2011 - 16:03 Uhr

verwendetes Datenbanksystem: Oracle 9.2

Hallo zusammen

Ich habe ein Programm, welches ohne Probleme funktioniert. Entwickelt wurde es im Visual Studio 08. Nun wird es aber im VS10 weiter entwickelt. In diesem Programm gibt es auch verschiedene DataSets. Nun sollte ich ein DataSet abändern (maxLength eines Strings ändern) und habe dabei folgendes festgestellt:

Sobald ich im DataSet etwas ändere (und sei es nur die Grösse der Tabellen in der optischen Darstellung) wird die ganze Klasse mit den DS neu generiert. Leider finden die Klassen, welche ein DS instanzieren die verschiedenen DS nicht mehr. Ich kriege deshalb 149 Fehler ohne dass ich etwas veränderet hätte.

Ich vermute, dass es irgendwo einen private gesetzt hat ohne dass es sollte. Ich konnte aber leider nirgends ein private finden.

Kann mir jemand dieses Verhalten erklären?

Hier mal noch eine Liste mit den verschiedenen Fehlermeldungen die ich erhalte:
The type name 'RZ100DataTable' does not exist in the type 'PABSDataSet'
The type or namespace name 'RZ100TableAdapter' das not exist in the namespace DataImport.PABSDataSetTableAdapters
Cannot apply indexing with [] to an expression of type 'DataImport.PABSDataSet.PS001DataTable'
'DataImport.PABSDataSet.PS001DataTable' is inaccessible due to its protection level

07.12.2010 - 15:33 Uhr

Bin noch einmal einen Schritt weiter gekommen. Ich habe nun folgendes Query


SELECT * FROM
(SELECT ROWNUM rnum, a.* FROM
(SELECT * FROM le001) a WHERE ROWNUM < 20)
WHERE rnum > 10

Dies gibt mir alle Daten, die ich benötige. Doch leider ist dies immer noch nicht das, was ich will, denn die Rownum wird nun auch ausgegeben und ich möchte diese nicht, da das SQL BULK dies nicht versteht (resp. nicht braucht).

vom SyncFramework habe ich noch nichts gehört. werde ich gleich mal anschauen.

Danke

07.12.2010 - 15:23 Uhr

wenn du willst könntest du auch Rollen erstellen. Diese kannst du dann den Benutzern zuordnen und falls sich die Rechte mal ändern sollten, kannst du sie einfach verändern.

07.12.2010 - 14:57 Uhr

Wie meinst du, wenn jemand anderes Daten modifiziert? ich will ja nur den Export machen. In dieser Zeit darf niemand die Daten verändern und nachher arbeiten sie mit dem SQL Server.
Das mit dem Primärschlüssel geht leider auch nicht. Ich muss mehrere Tabellen exportieren und habe überall unterschiedliche Primärschlüssel.

Dein Query funktioniert, wenn man das * aus dem 2. Select entfernt. Habe ein ähnliches bereits im Netz gefunden. Leider kann ich das * nicht integrieren. Werde es noch ein bisschen versuchen.


SELECT * FROM
(SELECT ROWNUM AS a FROM le001 ORDER BY rownum) v
WHERE v.a BETWEEN 10 AND 20

so funktionierts und gibt die Rownum zurück. Ich müsste aber die Werte dieser Reihen haben.


SELECT * FROM
(SELECT ROWNUM AS a, * FROM le001 ORDER BY rownum) v
WHERE v.a BETWEEN 10 AND 20

Hier gibts den Fehler ORA-00936: Ausdruck fehlt

Vielen Dank für den Tipp. Ich hoffe, dass ich dies noch zum Funktionieren bringe

07.12.2010 - 14:37 Uhr

hab ich auch gesehen. Funktionierte aber nicht und folgender Abschnitt hat mich dann bewogen aufzuhören und weiter zu suchen.

„The Smart Card API is very easy to use. However, if you want to write a Smart Card application, you must know the commands to send to the card to perform operations such as selecting files, verifying PINs, or reading data. Those commands are called APDU commands, and are described in the specification of the Smart Card you want to access. The purpose of this article is not to explain how to use a Smart Card, but to give you a simple C# API to play with any Smart Card you'd want.“

07.12.2010 - 14:06 Uhr

verwendetes Datenbanksystem: Oracle 9

Hallo zusammen

Ich muss Daten von einem Oracle Server auf einen SQL Server exportieren. Leider kann ich das nicht mit dem Tool das im SQL Server zur Verfügung steht, da ich kein Oracle Client installieren darf.
Nun schreibe ich ein Programm. Ich benutze dafür SQL Bulk. Das funktioniert super und ist sehr schnell. Leider muss ich dazu die Daten vom Oracle Server in ein DataSet laden. Bei einer Tabellengrösse von über 5 Mio. Einträgen bekomme ich da eine OutOfMemoryException.
Deshalb mache ich zuerst einen Count und schaue, wieviele Reihen in der Tabelle vorhanden sind.
Wenn über 100'000 Tausend Einträge vorhanden sind, möchte ich diese nacheinander auslesen. Das heisst, zuerst die ersten 100'000 dann die zweiten etc.
Leider funktioniert das nicht. Ich habe versucht die Bedingung mit rownum zu machen (geht für die ersten aber dann nicht mehr) oder mit rowid (entspricht nicht einer Zahl sondern einem generierten String).

Kann mir jemand einen Tipp geben, wie ich mein Problem lösen kann? Konnte bis jetz nur herausfinden, dass meine Lösungsansätze nicht funktionieren

Vielen Dank für eure Hilfe
chanderegg

07.12.2010 - 13:51 Uhr

genau das hat mir gefehlt.
habe mich mit dem Kunden in Verbindung gesetzt. Die haben das auch nicht.
das Projekt wurde abgebrochen aber trozdem danke für den Tipp

01.12.2010 - 15:40 Uhr

verwendetes Datenbanksystem: SmartTerminal XX44

Hallo zusammen

Ich möchte die Informationen einer Versichertenkarte auslesen. Dazu wurde mir ein SmartTerminal XX44 zur Verfügung gestellt. Leider finde ich nirgends eine Anleitung, wie ich mit C# nun an diese Daten komme.

Kann mir jemand einen Tipp geben?

Vielen Dank
chanderegg

13.09.2010 - 11:20 Uhr

verwendetes Datenbanksystem: Oracle

Hallo zusammen

Ich schreibe zur Zeit ein Programm, mit welchem man mittels PDA Leistungen erfassen kann (in einem Spital). Nun kriege ich die Daten via Webservice auf das PDA. Soweit funkioniert alles.

Blöderweise haben Patienten die noch im Spital liegen und nicht klar ist, wenn sie wieder gehen können, noch kein Austrittsdatum. Ich soll nun aber genau nach diesem Austrittsdatum sortieren.

Dies ist mit linqToSql gemacht worden (ich baue das Programm nur aus). Leider ist dies aber nicht möglich, wenn Felder DBNull enthalten. Ich wollte deshalb die Daten auf den maximal Wert setzen. Diese funktioniert jedoch muss ich diese Felder wieder auf null setzen bevor ich sie dem Webservice schicke. Dies lässt DateTime nicht zu.

Hier mein Code


private PABSSmartDeviceDBDataSet.PatientFaelleDataTable CopyToDisplayTable(PABSSmartDeviceDBDataSet.PatientFaelleDataTable Table)
        {
            foreach (PABSSmartDeviceDBDataSet.PatientFaelleRow row in Table)
            {
                if (row.IsAustrittNull())
                {
                    row.Austritt = DateTime.MaxValue;
                }
            }

            PABSSmartDeviceDBDataSet.PatientFaelleDataTable displayTable = new PABSSmartDeviceDBDataSet.PatientFaelleDataTable();
            IEnumerable<PABSSmartDeviceDBDataSet.PatientFaelleRow> query =
                from row
                    in Table.Distinct(new RowComparer())
                orderby row.SortID, row.Abteilung, row.Austritt descending, row.Fachbereich, row.Zimmer, row.Name, row.Vorname
                //orderby row.SortID, row.Abteilung, row.Fachbereich, row.Zimmer, row.Name, row.Vorname
                select row;
            query.CopyToDataTable<PABSSmartDeviceDBDataSet.PatientFaelleRow>(displayTable, LoadOption.OverwriteChanges);

            
            return displayTable;
        }

Kann ich irgendwie die linqToSql abfrage abändern, so dass DBNull keinen Fehler mehr wirft?

Irgendwie finde ich die DataTable-Definition auch nicht super. Der Austritt ist als DateTime definiert, der Default ist DBNull und bei Null wird eine Exception geworfen. Das macht doch irgendwie keinen Sinn oder?

Habe versucht den Default zu ändern aber kann dort höchstens ein Datum eingeben. Beim NullValue konnte ich gar nichts ändern. Welches sind dort die besten Einstellungen?

Vielen Dank für Eure Hilfe
chanderegg

12.07.2010 - 14:41 Uhr

Ok

Nun stellt sich aber wieder die Frage, wie ich das xml an den Service sende.

ich habe versucht es dem Channel mit zu geben oder einer Request Klasse. Beides geht nicht. Soll ich den Service mit einem Http Target ansteuern oder wie geht das?

12.07.2010 - 14:29 Uhr

Hallo Martin

Ja ich arbeite mit .Net.
Der Kunde konnte bis jetzt in der Schnittstelle definieren, welche Daten ausgelesen werden sollen (mittles xml File) und wie das zu sendende xml auszusehen hat (mittels xslt File).
Ich dachte mir, wenn ich wieder ein xml senden kann, so kann ich diese Konfigurationsmöglichkeit erhalten.
Meinst du mit Dienstbeschreibung das .wsdl File (wird auch im xml Format angezeigt)?

12.07.2010 - 13:50 Uhr

Hallo zusammen

Ich muss eine bestehende Schnittstelle für einen Kunden um einen WCF Service erweitern.
Die Schnittstelle liest Daten aus und sendet diese als xml via http oder filewriter (je nach config) an einen biztalk server. nun möchte der Kunde, dass dies auch via wcf geht.

Ich habe vom Kunden seinen generierten Service erhalten. Dieser enthällt jedoch Klassen, von welchen ich dann Objekte senden kann (Objekt-orientiert halt). Da ich aber bereits ein xml Dokument habe und mich vor dem Aufwand scheue, dies zu entschlüsseln, in die Objekte einzufüllen und so zu senden, möchte ich direkt dem wcf Service mein xml senden. (wird ja zum Senden sowieso ein xml)

Nun meine Frage an euch: Wie kann ich einem WCF Service direkt ein xml schicken, welches die Struktur der Objekte enthält?

Falls dies nicht möglich ist, möchte ich euch fragen, ob es besser ist das xml aufzuschlüsseln oder ob ich besser dem Kunden sage, er soll den Service anpassen, so dass ich das xml als String senden kann?

Vielen Dank für eure Hilfe
chanderegg

31.03.2010 - 14:41 Uhr

verwendetes Datenbanksystem: Oracle 9

Hallo zusammen

Ich weiss nicht, ob jemand von euch Devart kennt. Ich hoffe aber, dass es jemand gibt der mir helfen kann.

Mein Problem:
Ich habe ein Programm geschrieben, welches mit Entity Framework auf die DB zugreift. Da Entity Framework standartmässig nur auf SQL zugreifen kann, habe ich mir Devart heruntergeladen und installiert. Nun ist der Provider des Entity Frameworks Devart.Data.Oracle.

Bei mir funktioniert das Programm einwandfrei aber wenn ich es bei jemandem laufen möchte, der Devart nicht installiert hat, so kommt die Fehlermeldung:
Unable to find the requested .Net Framework Data Provider. It may not be installed.

Es muss aber irgendwie gehen, ohne dass man Devart bei sich installieren muss. Weiss jemand wie ich das machen kann?

Ich habe in anderen Programmen auch schon mit Devart gearbeitet. Dort habe ich aber OracleDataReaders etc. verwendet und danach die Devart dll's in die Referenzen eingefügt. Beim Entity Framework ist das hingegen nicht nötig.

Vielen Dank für Eure Hilfe

chanderegg

17.03.2010 - 11:15 Uhr

Das heisst, wenn du im Visual Studio ein neues DataSet erstellst, schreibst du jede Zeile selber??? respekt.

Wenn ich also im Deigner alle Oracle Connections auf DbConnections umstelle und denen die richtigen Objekte zuweise, sollte das also Db unabhängig sein?

Bin gerade ein wenig frustriert. Hatte den Auftrag ein Programm auf SQL und Oracle lauffähig zu machen und habe alle TableAdapter gelöscht und von Hand abgefüllt.

17.03.2010 - 10:53 Uhr

@juetho: habe vergessen die Verbindung zu schliessen. Danke für den Hinweis.
Wenn ich beim Debugen das DataSet anschaue, so fehlen die Zeilen.

Das Problem ist, dass ein DataTableAdapter nicht Datenbank unabhänging sein kann. Das heisst, dass wenn ich ein DataTableAdapter für Oracle erstelle, so werden im Designer OracleConnection, OracleCommand und OracleReader verwendet.

Wenn aber ein Kunde mit SQL arbeiter so funktioniert es nicht. Deshalb lade ich die Daten 'von Hand' ins DataSet.

Die Methode .Load sah vielversprechend aus. Leider werden auch dort nur die ersten Zeilen übernommen.



            string query = @"select * from mg001 order by mgspr, mgnbr";

            myConnection = AGB70.PABS.Common.Var.gblDBInfo.GetDbConnection();
            myConnection.Open();

            myCommand = AGB70.PABS.Common.Var.gblDBInfo.GetDbCommand(query, myConnection);
            myReader = myCommand.ExecuteReader();

            MG001DataSet aDataSet = new MG001DataSet();

            aDataSet.Load(myReader, LoadOption.OverwriteChanges, aDataSet.MG001);

            myConnection.Close();

            return aDataSet;


@BerndFfm
Ich habe mehrmals kontrolliert, wo die Umbrüche verloren gehen. Sie gehen verloren, wenn ich sie der Spalte übergebe. Der String selber hat die Umbrüche.
Ausserdem gehen nicht nur die Umbrüche verloren, sondern alle restlichen Zeilen. Das heisst, ich habe danach nur noch die erste Zeile

17.03.2010 - 09:33 Uhr

verwendetes Datenbanksystem: Oracle 10 + Sql 2005

Hallo zusammen

Ich hab ein Programm, welches auf Oracle und Sql laufen muss. Nun fülle ich Daten mit einem DbDataReader in die Datensets ab. Dies hat eigentlich sehr gut funktioniert. Nun habe ich aber auf der DB eine Spalte vom Typ Long.

Wenn ich die auslese, sehe ich im DataReader, dass es ein mehrzeiliger String ist. Wenn ich diesen aber dem DataSet zuweise, so ist nur die erste Zeile im DataSet.

Kann mir jemand von euch sagen, wie ich es schaffe, dass der ganze String ins DataSet kommt?

Hier mein Code:


            string query = @"select * from mg001 order by mgspr, mgnbr";

            myConnection = AGB70.PABS.Common.Var.gblDBInfo.GetDbConnection();
            myConnection.Open();

            myCommand = AGB70.PABS.Common.Var.gblDBInfo.GetDbCommand(query, myConnection);
            myReader = myCommand.ExecuteReader();

            MG001DataSet aDataSet = new MG001DataSet();

            while (myReader.Read())
            {
                MG001DataSet.MG001Row row = aDataSet.MG001.NewMG001Row();

                row.MGSPR = myReader[0].ToString();
                row.MGNBR = myReader[1].ToString();
                row.MGKTX = myReader[2].ToString();
                row.MGLTX = myReader[3].ToString();  //Dieser String ist mehrzeilig

                aDataSet.MG001.AddMG001Row(row);
            }

            return aDataSet;

Vielen Dank für Eure Hilfe

10.12.2009 - 15:06 Uhr

für dich als programmierer spielt es keine rolle, ob der ordner existiert oder nicht. du musst einfach die daten von der exchange-db laden. ich habe damit aber nun auch ein kleines problem. schau mal meinen post an, dann siehst du schon mal, wie man zu den daten kommt

mein post

das programm muss aber auf dem server laufen damit es funktioniert. die url für den connectionstring ist http:\server\public\ordner

10.12.2009 - 15:02 Uhr

verwendetes Datenbanksystem: Exchange 2003

Hallo zusammen

Ich habe etwa vor einem Jahr ein Programm geschrieben, welches die Kontaktdaten im Outlook aus einem öffentlichen Ordner in eine Oracle DB speichert. Dies hat einwandfrei funktioniert bis jetzt aber nun habe ich folgendes Problem:
Beim Auslesen der Daten kennt er den Index nicht mehr.

Ich bin wie folgt vorgegangen:
Zuerst die Verbindung herstellen


oCn.Provider = "exoledb.datasource";
oCn.Open(sURL, ExBenutzer, ExPasswort, 0);

funktioniert

dann recordset erstellen


//Definiert den String für die SQL Abfrage
            strSql = "";
            strSql = "select * from scope ('shallow traversal of " + "\"";
            strSql = strSql + sURL + "\"') WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false";
            strSql = strSql + " ORDER BY \"urn:schemas:contacts:sn\" ";

            //Erstellt Objekte mit den Records
            oRs.Open(strSql, oCn,
                ADODB.CursorTypeEnum.adOpenStatic,
                ADODB.LockTypeEnum.adLockOptimistic, 1);

geht auch und erkennt sogar, dass es einen Eintrag enthält

dann die Daten in ein Objekt schreiben


oFields = oRs.Fields;

                DatenObjekt ExchangeDatenObjekt = new DatenObjekt();

                //Gibt die Anrede aus
                oField = oFields["urn:schemas:contacts:personaltitle"];
                ExchangeDatenObjekt.Anrede = oField.Value.ToString();

                //Gibt den Vornamen aus
                oField = oFields["urn:schemas:contacts:givenName"];
                ExchangeDatenObjekt.Vorname = oField.Value.ToString();

                //Gibt den Nachnamen aus
                oField = oFields["urn:schemas:contacts:sn"];
                ExchangeDatenObjekt.Nachname = oField.Value.ToString();

                //Gibt die Strasse inklusive Hausnummer aus
                oField = oFields["urn:schemas:contacts:mailingstreet"];
                ExchangeDatenObjekt.Adresse = oField.Value.ToString();

                //Gibt die Postleitzahl aus
                oField = oFields["urn:schemas:contacts:mailingpostalcode"];
                ExchangeDatenObjekt.Postleitzahl = oField.Value.ToString();

                //Gibt den Ort aus
                oField = oFields["urn:schemas:contacts:mailingcity"];
                ExchangeDatenObjekt.Ort = oField.Value.ToString();

                //Gibt die Mail-Adresse aus
                oField = oFields["urn:schemas:contacts:email1"];
                ExchangeDatenObjekt.Email = oField.Value.ToString();

                //Gibt die Festnetz-Telephonnummer aus
                oField = oFields["urn:schemas:contacts:telephoneNumber"];
                ExchangeDatenObjekt.Tel = oField.Value.ToString();

                //Gibt die Natelnummer aus
                oField = oFields["urn:schemas:contacts:mobile"];
                ExchangeDatenObjekt.Mobile = oField.Value.ToString();

                //Gibt die Faxnummer aus
                oField = oFields["urn:schemas:contacts:facsimiletelephonenumber"];
                ExchangeDatenObjekt.Fax = oField.Value.ToString();

                //Gibt die Abteilung/Spezifikation aus
                oField = oFields["urn:schemas:contacts:profession"];
                ExchangeDatenObjekt.Abteilung = oField.Value.ToString();

                //Gibt die Firma aus
                oField = oFields["urn:schemas:contacts:o"];
                ExchangeDatenObjekt.Firma = oField.Value.ToString();

                //Gibt das Land aus
                oField = oFields["urn:schemas:contacts:mailingcountry"];
                ExchangeDatenObjekt.Land = oField.Value.ToString();

                //Gibt die URL der Firmenhomepage aus
                oField = oFields["urn:schemas:contacts:businesshomepage"];
                ExchangeDatenObjekt.URL = oField.Value.ToString();

                //Gibt das Erstelldatum aus
                oField = oFields["DAV:creationdate"];
                ExchangeDatenObjekt.Erstelldatum = Convert.ToDateTime(oField.Value);

                return ExchangeDatenObjekt;

Hier gibts nun Probleme, da er den Index nicht erkennt. Ich habe deshalb mal nachgeschaut, was für Indexes so ein Eintrag hat und folgendes Resultat erhalten:
DAV:contentclass: urn:content-classes:person
DAV:isroot:
DAV:defaultdocument:
DAV:getcontenttype: message/rfc822
DAV:lastaccessed:
DAV:resourcetype:
DAV:creationdate: 08.12.2009 16:33:53
DAV:getcontentlanguage:
DAV:ishidden: False
DAV:parentname: http://....
DAV:getcontentlength: 5965
DAV:isstructureddocument: False
http://schemas.microsoft.com/repl/repl-uid: rid:6f96d09eedb6244ca157318e4c0ff76800000011c71e
DAV:displayname: Hans Muster-1072143035.EML
DAV:href: http://...
DAV:isreadonly: False
DAV:getlastmodified: 09.12.2009 14:53:25
DAV:iscollection: False
http://schemas.microsoft.com/repl/resourcetag: rt:6f96d09eedb6244ca157318e4c0ff76800000011c71e6f96d09eedb6244ca157318e4c0ff76800000011c923

Ich frage mich nun wo sind meine Felder hingekommen und wieso hat sich das plötzlich geändert?

ps. Das Programm wird nur alle paar Monate ausgeführt.

Vielen Dank für Eure Hilfe
chanderegg

09.12.2009 - 17:04 Uhr

Hallo zusammen

Ich habe ein Datagridview, in welchem ich dem User die Möglichkeit bieten will, je nach Wunsch nach einer bestimmten Spalte zu sortieren.
Ich hole die Daten mit Entity Framework von der DB und fülle diese in ein List<>-Objekt.

Nun funktioniert leider die Sortierung nicht, obwohl alle Properties richtig eingestellt sind. Wenn ich beim Event ColumnHeaderMouseClick die sortierung manuel machen will kommt folgender Fehler:
Das DataGridView-Steuerelement kann nicht sortiert werden, wenn es an eine IBindingList gebunden ist, die das Sortieren nicht unterstützt.

Also ist das List<>-Objekt mein Problem. Da es für die programm interne Weiterverarbeitung aber recht praktisch ist, möchte ich eigentlich nicht darauf verzichten.

Hat mir jemand einen Tipp, wie ich das DataGridView trozdem sortierbar machen kann?

Meine manuelle sortierung:


private void dgvMitarbeiter_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            dgvMitarbeiter.Sort(dgvMitarbeiter.Columns[e.ColumnIndex], System.ComponentModel.ListSortDirection.Ascending);
        }

22.11.2009 - 15:26 Uhr

Hallo zusammen

Ich versuche zur zeit zum ersten mal ein Video in einem Form abzuspielen. Nach kurzer Suche habe ich Microsoft.DirectX.AudioVideoPlayback gefunden.

Nun bringe ich dies aber nicht zum laufen. Ich habe nach der Anleitung der Seite Audio Video Playback gearbeitet. Wirkt ja ziemlich simpel.

Leider bekomme ich aber immer folgende Fehlermeldung: Fehler in der Anwendung. Sagt einem ja nicht viel. Ich konnte schlussendlich aber noch einen ErrorCode (-2147220992) und einen ErrorString(DIERR_INSUFFICIENTPRIVS & VFW_E_INVALIDMEDIATYPE ) heraus finden. Habe aber darüber im Internet nichts gefunden.

Der falsche Datentyp kann es nicht sein, da es .avi ist. Kann mir jemand sagen, was dieser Fehler bedeuted oder wo ich das nachsehen kann? Oder weiss vielleicht jemand sogar die Lösung?

Mein Code:


                Video a = new Video(Dateiname);
                a.Owner = this;
                a.Play();

Komme aber nie über die erste Zeile hinaus.

Vielen Dank für Eure Hilfe

20.11.2009 - 15:05 Uhr

Ok vielen Dank für die Hilfe.

Ich wollte die Suche ein bisschen dynamischer machen und habe mich deshalb für folgende Variante entschieden.


String aktuellesVerzeichnis = Environment.CurrentDirectory;

Char seperator = Convert.ToChar("\\");

String[] aufgeteilterPfad = aktuellesVerzeichnis.Split(seperator);

Environment.CurrentDirectory = aufgeteilterPfad[0] + "\\";

String PfadZumOrdner = Path.GetFullPath(txtZielordner.Text);

Das Resultat ist dann C:\temp, wenn txtZielordner.Text = temp oder Temp ist

20.11.2009 - 11:40 Uhr

das habe ich auch schon gesehen. leider gibts kein special folder temporary

20.11.2009 - 11:17 Uhr

Hallo zusammen

Ich habe ein Programm, welches auf den Ordner C:\Temp zugreift. nun gibt es aber User, die kein Laufwerk C haben (Client User). Ich möchte nun den Ordner Temp suchen, ohne den Pfad vorher zu kennen.

Ist dies möglich?

ein Beispiel wie ich es meine:


Directory.GetDirectories("*\\Temp"); //geht natürlich nicht aber etwa so möchte ich danach suchen

Vielen Dank für Eure Hilfe

chanderegg

10.11.2009 - 11:27 Uhr

Hallo zusammen

Ich zeigen in einem Programm dem Kunden Daten in einer Tabelle an. Nun möchte ich, dass ich diese Daten als Diagramm im Excel darstellen kann.

Ich habe mich informiert und gesehen, dass dazu die Daten zuerst in die Zellen eingefügt werden müssen und danach ein Range definiert werden muss. Ich möchte jedoch nur das Diagramm im Excel anzeigen.

Kann man ein Excel Diagramm direkt aus einer Datasource erstellen?

Vielen Dank für Eure Antworten

20.10.2009 - 15:37 Uhr

verwendetes Datenbanksystem: Oracle 10

Hallo zusammen

Ich habe ein DataGridView, welches Daten anzeigt, die es von einem DataTable kriegt. Nun habe ich im DataGridView eine Combobox mit den möglichen Werten für die Spalte. Dies Werte werden wiederum von einem anderem DataTable ausgelesen.
Nun habe ich das Problem, dass die beiden Datentypen nicht gleich sind. d.h. Die Werte für das Grid sind Decimal und die Werte für die ComboBox sind String.

Deshalb meine Frage: Wie kann ich den Datentyp eines DataTables ändern, wenn der Datentyp der Datenbank nicht verändert werden darf?

Ich habe schon ein bisschen probiert und entweder die Meldung: "Datentyp kann nicht geändert werden, wenn Daten im Table sind" oder die Meldung: "Daten konnten nicht eingefügt werden. Falscher Datentyp" . je nachdem ob ich den Datentyp vor dem abfüllen oder nach dem abfüllen geändert habe.

Der Code veranschaulicht ein Beispiel. Ich erstelle das Datenset (Spalte rzin2 hat den Typ Decimal) danach ändere ich den Datentyp auf String (da die Daten aus der DB als String ausgelesen werden) und nach dem abfüllen möchte ich wieder auf Decimal wechseln (da dies dem Typ im Grid entspricht).



            DataSet1 ds = new DataSet1();
            RZ001TextDataSet rz = new RZ001TextDataSet();
            BS010DataSet bs = new BS010DataSet();

            ds.RZ001.Columns["RZIN2"].DataType = rz.RZ001.Columns["RZIN2"].DataType;

            da.Fill(ds.RZ001);

            ds.RZ001.Columns["RZIN2"].DataType = bs.BS010.BS010V06Column.DataType;

Gibt es keine Methode um die Werte einer ganzen Spalte zu Convertieren?

Vielen Dank für eure Hilfe

09.10.2009 - 13:23 Uhr

Geht leider auch nicht, da es keine Definition für .Sum gibt.

09.10.2009 - 12:08 Uhr

verwendetes Datenbanksystem: Oracle 10

Hallo zusammen

Ich möchte mit Entity Framework folgendes SQL-Query nachbilden:
SELECT DISTINCT(p_key), p_k_key, Sum(d_stdv * d_satz) FROM Projekt, Detail WHERE p_k_key = d_k_key AND p_key = d_p_key AND d_fakstatus = '1' GROUP BY p_key, p_k_key;

Leider bin ich bis jetzt immer gescheitert. Das erste Problem besteht darin, dass ich 2 Bedingungen für den join überprüfen muss. (p_k_key = d_k_key AND p_key = d_p_key). Ausserdem habe ich nicht herausgefunden, wie man distinct und sum erstellt.

Mein Code sieht wie folgt aus:


var query = from pro in alleDaten.ProjekteSet
                        join det in alleDaten.DetailsSet
                        on pro.KundenKey.Trim() equals det.KundenKey.Trim() && pro.Projekt.Trim() equals det.Projekt.Trim()
                        where det.FakStatus == "1"
                        select new object {KundenKey = pro.KundenKey, Projekt = pro.Projekt,  det.StundenVerrechenbar * det.Stundensatz};

Der Code zeigt aber mehrere Fehler an.

Kann mir jemand weiter helfen und gibt es nicht irgendwo eine Seite die, analog zu den etlichen SQL-Seiten, aufzeigt wie solch komplizierte Abfragen erstellt werden?

Vielen Dank für Eure Hilfe!

02.10.2009 - 11:53 Uhr

ok habe das Programm wieder umgebaut. Leider mit dem gleichen Resultat: Allgemeiner Fehler in GDI+.

Ich habe nach diesem Fehler gegoogelt und in einem Forum gelesen, dass man mit getBaseException() den wahren Grund für den Fehler sehen sollte. Jedoch steht da auch nur Allgemeiner Fehler in GDI+.

Nun sieht es so aus:


            try
            {
                System.IO.MemoryStream stream = new System.IO.MemoryStream();

                picBildVoll.Image.Save(stream, ImageFormat.Jpeg);

                stream.Position = 0;

                DataObject zuSpeicherndesBild = new DataObject(DataFormats.Bitmap, stream);

                Clipboard.Clear();

                Clipboard.SetDataObject(zuSpeicherndesBild, true);
            }
            catch (Exception ex)
            {
                Exception fehler = ex.GetBaseException().GetBaseException();
            }

02.10.2009 - 11:17 Uhr

die exception kommt leider schon beim serialisieren: Allgemeiner Fehler in GDI+.

keine Ahnung was das bedeuted. mein Code sieht nun so aus:


BinaryFormatter test2 = new BinaryFormatter();
            SoapFormatter test = new SoapFormatter();

            System.IO.FileStream stream = new System.IO.FileStream("C:\\Temp\\stream.txt", System.IO.FileMode.Create);

            test.Serialize(stream, picBildVoll.Image);

            DataObject zuSpeicherndesBild = new DataObject(DataFormats.Bitmap, stream);

            Clipboard.Clear();

            Clipboard.SetDataObject(zuSpeicherndesBild, true);

Dabei ist es egal mit welchem Formatter ich serialisiere

Ich wusste zudem nicht, welchen Datentyp die Datei haben soll und habe mich einfach mal auf .txt entschieden.

02.10.2009 - 10:58 Uhr

Vielen Dank für die Antwort

Ich habe das nun mal angeschaut und habe versucht mit SoapFormatter und BinaryFormatter die Datei irgendwie zu serialisieren.

Dadurch musste ich auch einen Stream erstellen, in welchem die serialiserte Datei reingeschrieben wird.

Wie bringe ich nun die Clipboard dazu auf diesen Stream zuzugreifen und diesen wieder zu deserialisieren?

02.10.2009 - 10:12 Uhr

Hallo zusammen

Ich habe ein ganz simples Programm. Das Programm zeigt Röntgenbilder als Vorschau an und wenn man Doppelklickt, wird das Bild im Vollbildmodus angezeigt.

Als zusätzliche Funktion gebe ich dem User die Möglichkeit, das Bild gleich noch in die Clipboard zu speichern, falls der Arzt das Bild noch braucht (für Bericht im Word oder so).

Bei meinen Tests funktionierte das ganze ohne Probleme. Ich habe dazu einfach Bilder aus dem Netz abgespeichert (+/- 50KB). Wenn ich das ganze aber nun für Röntgenbilder mache, so werden die Bilder (2,86MB) nicht in die Clipboard gespeichert.

Ist 2,86MB zu gross? Wenn ja wo liegt die Limite? Oder habe ich eventuell einen Fehler?

Mein Code sieht wie folgt aus:


private void pbSpeichern_Click(object sender, EventArgs e)
        {
            DataObject zuSpeicherndesBild = new DataObject(DataFormats.Bitmap, picBildVoll.Image);

            Clipboard.Clear();

            Clipboard.SetDataObject(zuSpeicherndesBild);
        }

Eigentlich ja wirklich simpel.

Vielen Dank für euere Antworten

23.09.2009 - 16:06 Uhr

Hallo zusammen

Ich habe ein Datagridview mit Kundendaten. Nun gibt es verschiedene Arten von Kunden. Ich möchte zum Beispiel, dass die alten Kunden nur mit einer grauen Schrift geschrieben werden.
Leider wird das Grid aber immer mit dem DefaultCellStyle gestaltet. Weiss jemand wie ich das machen kann.
Mein Versuch sah so aus:


for (int i = 0; i < KundendatenAnsicht.RowCount; i++)
            {
                if (KundendatenAnsicht.Rows[i].Cells["Art"].Value.ToString() == "A")
                {
                    KundendatenAnsicht.Rows[i].DefaultCellStyle.ForeColor = Color.Gray;
                }
                else
                {
                    KundendatenAnsicht.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                }
            }

Leider hats nicht geklappt.
Ausserdem habe ich versucht einen neuen CellStyle zu definieren und diesen dann zuzuweisen. Auch ohne Erfolg.

Vielen Dank für Eure Hilfe

14.09.2009 - 16:21 Uhr

verwendetes Datenbanksystem: Oracle 10

Hallo zusammen

ich arbeite seit kurzem mit dem Entity Framework. Als ich angefangen habe, habe ich ein Video gefunden, in welchem die Daten wie folgt ausgelesen werden:


Entities alleDaten = new Entities();

foreach (Kunden Kunde in alleDaten.KundenSet.OrderBy(kun => kun.Sortieradresse))
            {
                betreffendeKunden.Add(Kunde);
            }

Nun habe ich im Internet noch ein bisschen rumgeforscht und eine weitere Variante entdeckt:


var alleDaten = new Entities();

var Kundus = from künu in alleDaten.KundenSet
                         orderby künu.Sortieradresse
                         select künu;

            foreach (var Kunde in Kundus)
            {
                alleKunden.Add(Kunde);
            }

Kann mir jemand erklären, was die Unterschiede der beiden Varianten sind und welches besser ist?

03.09.2009 - 09:13 Uhr

Hallo zusammen

ich bin auf der Suche nach einem Grid (zurzeit benutze ich das DataGridView), bei welchem einzelne Reihen nicht editierbar sein sollen, während andere editierbar sein sollen.

Das gleiche soll dann auch bei den Spalten möglich sein.

Kann mir jemand ein Grid empfehlen oder ist dies gar nicht möglich? Ich finde im Netz nirgends ein Grid, welches dies kann.

Kann ich das auch selber programmieren? (wird wohl gehen aber mit welchem Aufwand und wie gut muss man sein? (Programmiere erst seit 10 Monaten))

Vielen Dank für eure Hilfe

10.08.2009 - 11:10 Uhr

hallo zusammen

ich habe bei einer combobox den style auf dropdownlist eingestellt. nun sieht der balken, welcher die auswahl anzeigt, aus, als wäre er disabled. ich möchte aber, dass dieser balken weiterhin 'normal' aussieht.
mit den property backcolor und forecolor kann ich lediglich das aussehen der aufgeklappten auswahl definieren.

kann mir jemand erklären wie ich den balken anpassen kann?

vielen dank

03.08.2009 - 17:28 Uhr

warum? Es ist doch beschrieben, wie Arrays verschiedener Längen verwendet werden.

ja aber nicht wie eins mit unbestimmter länge definiert wird. deshalb brauche ich ja arrayList oder eben wie empfohlen List<>.

kann mir jemand erklären wie ich diese Listobjekte miteinander verknüpfe? Wird bei 5 Dimensionen verdammt kompliziert.

03.08.2009 - 17:03 Uhr

ja. leider fehlt auch dort wieder der ansatz des dynamischen Arrays.

hab mal versucht ein jagged Array aus ArrayLists zu machen. bin aber leider gescheitert

03.08.2009 - 16:55 Uhr

genau so sollte es werden aber muss man das Array nicht zuvor noch initialisieren?

etwa so:


int[, , , ,] test = new int[10, 20, 30, 40, 50]; //<-Das geht
int[, , , ,] test2 = new int[, , 30, 40, 50]; //So möchte ich es (geht nicht)

03.08.2009 - 16:26 Uhr

Hallo zusammen

Ich soll ein 5-dimensionales Array erstellen, wobei 2 dimensionen keine bestimmte Länge besitzen.
Irgendwie bringe ich es nicht fertig. Im Netz findet man höchstens 2-dimensionale Array und diese Versionen (von msdn oder galileo etc.) funktionieren bei mir irgendwie nicht.

kann mir jemand erklären, wie ich so ein Array erstelle?

Vielen Dank für eure Hilfe

25.06.2009 - 11:19 Uhr

hallo zusammen

ich schreibe zur zeit ein programm, welches daten von einer datenbank liest und in ein excel abfüllt.

nun habe ich das problem, dass manche einträge über den seitenrand hinaus gehen. kann mir jemand einen lösungsansatz bieten, wie ich nach dem letzten wort, dass ganz auf der seite platz hat, einen zeilenumbruch einfügen kann?

vielen dank