Laden...

DataSet richtig aktualisieren

Erstellt von shufflekeks vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.771 Views
S
shufflekeks Themenstarter:in
14 Beiträge seit 2014
vor 9 Jahren
DataSet richtig aktualisieren

verwendetes Datenbanksystem: ACCESS 2007, VS 2010 .NET 4.0

Folgendes Problem:
Ich habe Datensätze durch ein Grid dargestellt, dort kann ich alle einträge ändern usw.
Unter anderem auch die Position, die sofort sortiert werden.

dataGridView1.Sort(dataGridView1.Columns["Position"], ListSortDirection.Ascending);

Wenn ich nun mit einer foreach-Schleife

foreach (SeKonVorlageDataSet.TelegrammeRow row in seKonVorlageDataSet.Telegramme.Rows)

die Datensätze durchlaufe, bekomme ich die Reihenfolge, wie sie vor der Änderung waren, allerdings nicht die neue.

Und mein Update

telegrammeTableAdapter.Adapter.Update(seKonVorlageDataSet);

hilft mir da leider nicht.

Muss ich tatsächlich mit einer Schleife die Einträge nach Position sortieren? (Anstelle der foreach)

Lieben Gruß
Pascal

F
10.010 Beiträge seit 2004
vor 9 Jahren

Da fehlen aber einige Grundlagen.

  1. DGV benutzt den DataView zum sortieren, also musst du den auch zum iterieren benutzen wenn du die reihenfolge haben willst.

  2. Hat das aber überhaupt nichts mit irgendwelchen Reihenfolgen in der Accessdatei ( Access ist keine Datenbank ) zu tun.

Was meinst du denn erreichen zu wollen?

S
shufflekeks Themenstarter:in
14 Beiträge seit 2014
vor 9 Jahren

Ohja, da fehlen tatsächlich Grundlagen. Arbeite erst seit knapp 3 Wochen mit C#.

  1. Wie genau meinst du das? Wie bekomme ich die Verbindung von dem, was ich im Grid sehe und dem, womit ich in der foreach-Schleife arbeite?

  2. Wieso ist Access keine Datenbank? Diesen Zusammenhang verstehe ich nicht.

Ich möchte eine Reihenfolge von Dateien festlegen und diese dann in der vorgegebenen Reihenfolge kopieren.

Gruß Pascal

5.658 Beiträge seit 2006
vor 9 Jahren

Hi shufflekeks,

  1. Wie genau meinst du das? Wie bekomme ich die Verbindung von dem, was ich im Grid sehe und dem, womit ich in der foreach-Schleife arbeite?

Schau dir mal die Doku zum DGV und DataView an, dann sollte dir die Funktionsweise sehr schnell klar werden.

  1. Wieso ist Access keine Datenbank? Diesen Zusammenhang verstehe ich nicht.

Ist schon oft genug im Forum besprochen worden: Forumssuche nach access

Bitte beachte [Hinweis] Wie poste ich richtig?, besonders Punkt 1.

Christian

Weeks of programming can save you hours of planning

E
16 Beiträge seit 2014
vor 9 Jahren
Access ist (doch) Datenbank

Moin,

hier mein "Senf" zum Thema:

Für jeden Zweck gibt es ein Mittel.

Wenn die Vor- und Nachteile genau bekannt sind, können auch umstrittene Mittel (wie MS Access) zum Ziel führen.

Ich habe Multiuser-Access-Umgebungen seit Jahren im Einsatz (2008 und älter) - ohne irgendwelche Probleme.

Einfach pauschal zu sagen Access sei keine Datenbank, MDB ist Kranheit etc. ist nicht korrekt.

Es gibt eng defnierte Indikationen Access zu verwenden und in diese Grenzen leistet Access hervoragende Arbeit.

Viel Erfolg

emtcho

16.842 Beiträge seit 2008
vor 9 Jahren

Ich habe Multiuser-Access-Umgebungen seit Jahren im Einsatz (2008 und älter) - ohne irgendwelche Probleme.

Ohne Dir zu nahe treten zu wollen, aber ohne entsprechende Synchronisationsmechanismen ist das Zufall.
Allein die Häufigkeit von zerstörten Datenbanken und entsprechende Forenthreads (hier, Stackoverflow) zeigen das.
Manche sagen zwar, dass hätte sich schon lange geändert, aber die Häufigkeit der Fragen zeigen halt einfach etwas anderes.
Das Problem an für sich ist auch nicht Jet/ACE (Nachfolger von Jet), sondern eben Access selbst.

Wenn man die heutigen Anforderungen einer Datenbank anschaut, dann erfüllt diese Access eindeutig nicht.
Access ist kein vollständiges DMBS, was man in der Regel mit "Datenbank" meint. Es ist in erster Linie eine simple Datenbankdatei, das vor allem unter seiner Kompatibilität zu älteren leidet.

OleDb geht zwar schon, wie das meiste, aber man holt sich im Endeffekt mehr Probleme (Stabilität, Plattformabhängigkeit, Multi-User, Performance...) als Lösungen (wir hams doch eh schon?!) ins Haus.
Wer kann der sollte ein DBMS verwenden, das für den Zweck einer Datenbank auch konzipiert.

Wir brauchen aber das Thema nicht wieder und wieder durch zu kauen.

E
16 Beiträge seit 2014
vor 9 Jahren

Moin,

Ich habe Multiuser-Access-ohne entsprechende Synchronisationsmechanismen ist das Zufall.

Ich gehe voll konform mit dir!

Leider gibt es immer wieder Kunden (im letzten Jahr hatte ich davon drei), die darauf bestehen, aus welche Gründe auch immer, als Backend Access zu verwenden. Man macht alles mögliche es auszureden, aber manchmal bleibt es eben dabei!

Ich verwende fast immer ein statischen DataAccessLayer über den DataSet und lasse für jede Aktion 3 Versuche zu, nach jeden Misserfolg erhöhe ich die Wartezeit für den nächsten Versuch...

Etwa so (Beispiel TABLEADAPTER FILL):

UseTable ist nur ein Struct...


		/// <summary>
		/// Fills DataTable identified trough enum from. Makes at least 3 tries.
		/// </summary>
		/// <param name="table">table to be fetched from</param>
		private static void FetchData(UseTable table)
		{
			bool success = false;
			int tries = 0;
			int timeout = 0;

			do
			{
				tries++;
				if (tries > 3)
				{
					// Ensure outbreak after 3 not successfull tries.
					break;
				}

				try
				{
					switch (table)
					{
						#region [ Switch cases ]
						case UseTable.AircraftProduct:
							{
								taAircraftProduct = new CMDSTableAdapters.AircraftProductTableAdapter();
								taAircraftProduct.Fill(dataset.AircraftProduct);
								break;
							}
						#endregion
					}
					success = true;
				}
				catch (Exception exc)
				{
					log.TraceException("Fetch data failed.", exc);
				}

				if (!success)
				{
					timeout += 1000; // Increase wait. 1 + 2 + 3 Sec.
					System.Threading.Thread.Sleep(timeout);
				}

			} while (!success);

			if (!success)
			{
				System.Windows.MessageBox.Show(LocalizationUtilities.Localization.Instance.LocalizationData["MESSAGE_FETCH_DATA_FAILED"], AssemblyInfos.AssemblyTitle + " v. " + AssemblyInfos.AssemblyVersionShort, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation);
				throw new Exception("Fetch data failed 3 times. Please try again later");
			}
		}

Wie auch immer, mir ging es nur darum: Ob es uns gefällt oder nicht, es gibt Situationen wo Access verwendet werden muss.

Wenn es ordentlich gemacht wird, funktioniert es auch.

Pauschale Aussagen sind nicht professionell und irritieren, wie auch hier geschehen:

  1. Wieso ist Access keine Datenbank? Diesen Zusammenhang verstehe ich nicht.

Alles Gute und Viel Erfolg!

emtcho

S
shufflekeks Themenstarter:in
14 Beiträge seit 2014
vor 9 Jahren
 seKonVorlageDataSet.Telegramme.DefaultView.Sort = "Position asc";

foreach (DataRowView drow in seKonVorlageDataSet.Telegramme.DefaultView)
       {
       SeKonVorlageDataSet.TelegrammeRow row = (SeKonVorlageDataSet.TelegrammeRow) drow.Row; 

So habe ich es nun gelöst, sollte jemand also irgendwann mal dasselbe Problem haben.

Vielen Dank an emtcho für seinen Senf ( 😉) und an alle anderen für die "Hilfe".

Und verzeiht mir nochmal meine Unwissenheit, doch wenn man grade mal 3 Wochen damit arbeitet, Begriffe wie Hyperthreading, Backgroundworker, Timer, SQL usw noch nie zuvor gehört hat ist es wohl mehr als verständlich, das mir Grundlagen fehlen. Doch ich arbeite daran!