Laden...

Forenbeiträge von Humsch Ingesamt 56 Beiträge

29.04.2011 - 13:54 Uhr

@Witte: Den Artikel kenne ich. Habe vor Kurzem Paradox-Tabellen nach Access importiert um sie dann von dort aus nach MSSQL zu übertragen. Auch der Import nach Access ging nicht ohne bde. Paradox 5.0 nach Access 2007. Access schmiss dann auch diese Fehlermeldung. (Wird in der Tat häufig verwendet und ist somit nicht besonders hilfreich.) Insofern sind die Angaben in dem von Dir verlinkten Artikel mit Vorsicht zu genießen.

@Zumbi: Schon weiter gekommen? Es gibt eine BDE eXpress, die unter WIN7/64 laufen soll.

28.04.2011 - 22:35 Uhr

@Witte: Ohne bde geht gar nichts und unter 64er WIN7 läuft die dbe nicht. Ich hatte vor einiger Zeit ja das gleiche Problem mit einer alten bde-Anwendung und bin auf die XP-Box ausgewichen. Bei korrekt installierter dbe gibt es eigentlich kein Problem mit dem Zugriff unter WIN7/32 auf PDX-Tabellen. Ohne die dbe kriegst Du 'ne Fehlermeldung: Externe Datei hat unbekanntes Format. (Sinngemäß)

28.04.2011 - 09:57 Uhr

Habe auch noch eine Anwendung mit Paradox-Tabellen am Hacken.(Keine .Net-Application) Die läuft von WinXP bis WIN7(32) ohne Probleme. Unter WIN7(64) geht gar nichts. Ist jetzt ein wenig wie Stochern im Nebel aber vielleicht versuchst Du es mal unter'm 32er WIN7?
Ich habe grad mal 'ne Schrumpfanwendung mit 'ner Paradoxtabelle gebastelt, geht ohne Probleme. Kannst Du die Tabelle denn unter Paradox oder Access öffnen?

24.04.2011 - 11:35 Uhr

Diese Fehlermeldung hatte ich auch bekommen, wenn auch auf deutsch. > Fehlermeldung:

Die mit der Position des Währungs-Managers verknüpfte Zeile kann nicht unsichtbar gemacht werden. Ist in row.visible =false bei databound datagridView schon mal diskutiert worden.

23.04.2011 - 21:32 Uhr

Hallo skelle,
man kann dafür auch das Formatting-Event des DataGridView verwenden.


private void DGrV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
	if(DGrV.Columns[e.ColumnIndex].Index == 7){
		if(e.RowIndex < DGrV.Rows.Count -1){
			if((int)e.Value > 500){
				e.CellStyle.ForeColor	= Color.Maroon;
				e.CellStyle.BackColor	= Color.Yellow;
			}
		}
	}
}

20.04.2011 - 15:35 Uhr

Warum mit Kanonen auf Spatzen schießen? Wenn Du nur zwei Werte auslesen willst, dann kannst Du die dbf-Datei auch mit Excel öffen.

19.04.2011 - 12:45 Uhr

...Deswegen sperrt man eigentlich Datensätze zur Bearbeitung. Dafür gibt es mehrere unterschiedlich restriktive Level. Ich kenne üblicherweise die Sperrung, bei der man einen Datensatz, den ein anderer Nutzer gerade in der Mache hat, zwar lesen, aber nicht bearbeiten kann. Dann ist das oben beschriebene Szenario ausgeschlossen, allerdings musst du den Datensatz nach Freigabe durch den Fremdnutzer nochmal aufrufen, damit du den aktuellen Zustand hast....

Wenn Du Dir die Daten in ein DataSet lädst und anschl. die Verbindung trennst, wie willst Du dann den Datensatz, den Du im DS bearbeitest sperren? Was Du mit den Daten machst, nachdem Du sie ins DS geladen hast, davon 'weiß' die Datenbank nichts. Das Dir ein anderer Nutzer in die Quere gekommen ist, merkst Du erst, wenn Du Deine eigenen Änderungen zurückschreiben willst und dann musst Du sehen, wie Du darauf reagierst.

09.04.2011 - 18:34 Uhr

Versuch es doch mal mit :

WHERE x BETWEEN 1 AND @Parameter
07.04.2011 - 09:25 Uhr

Hallo Lennart,

das Problem hat sich erledigt. An die aktuelle Zeile und ihre Versionen kommt man über das RowUpdating-Ereignis. Ist in SqlRowUpdatingEventArgs enthalten. Hab ich gefunden in Datenbankprogrammierung - Doberenz/Gewinnus Seite 253f. Lesen hilft. 😁
Allerdings hab ich meinen Plan das zu benutzen bereits wieder verworfen. Die Verwendung der OUTPUT-Klausel beim UPDATE scheint mir besser geeignet.

Gruß und Danke

06.04.2011 - 09:31 Uhr

Wieso wirr? Ich hatte mein Anliegen doch konkretisiert.
Also noch mal kurz: Ich möchte zusätzlich zum Speichern des neuen Wertes Anzahl in einer anderen Tabelle die Differenz zwischen dem alten und dem neuen Wert speichern. Dazu könnte man einen Trigger benutzen, wenn ich nicht noch zusätzliche Daten, wie das Bearbeitungsdatum, dass individuell festgelegt wird und nicht mit dem Eingabedatum identisch ist und den Namen der Bearbeitungsroutine, die den Wert geändert hat, bräuchte. Kann der Name des Bearbeiters sein, muss aber nicht. Von daher kann ich das leider nicht mit Hilfe eines Triggers lösen. Daher dachte ich, man könnte das Problem innerhalb des DatenAdapters lösen, der die neuen Daten - geänderten Rows - ja kennen muss. Meine Frage ist nun: Wie komme ich an dieser Stelle an diese Zeilen? Die Memberliste des DatenAdapters liefert mir da keinen Hinweis.

04.04.2011 - 21:03 Uhr

Hallo winSharp93

danke für die schnelle Antwort.
Leider habe ich mich da wohl etwas missverständlich ausgedrückt.
Ich möchte den Command-Text noch etwas aufbohren um den Änderungsbetrag in eine neue Zeile einer anderen Tabelle zu schreiben.
Anstelle von statt hätte zusätzlich stehen müssen. Sorry. Ich habe da schon an einen Trigger gedacht, dem kann ich aber leider keine
Parameter mitgeben, so das diese Lösung nicht in Frage kommt.
Der Datenadapter muss die DataRows doch kennen, aus denen er die Werte für die Aktualisierung holt. In der MemberListe kann ich da aber nichts finden... X(

04.04.2011 - 16:45 Uhr

Zu Testzwecken habe ich mir eine kleine Applikation zusammengebaut, die u.a. einen Datenadapter beinhaltet, den ich wie folgt zusammenstelle:

private SqlDataAdapter get_DAAuftrag(){
	var sqlAdp = new SqlDataAdapter();
	var sqlCmdSelect = new SqlCommand{/*
	...
	*/
	};
	sqlCmdSelect.Parameters.Add(param1);
	sqlAdp.SelectCommand = sqlCmdSelect;
	var sqlCmdUpdate = new SqlCommand{
		Connection	= _sqlCon,
		CommandText =
			@"UPDATE Aufträge
			SET Anzahl = @Anzahl
			WHERE (Kundennummer			= @Kundennummer	AND
						Auftragsnummer		= @Auftragsnummer	AND
						Positionsnummer	= @Positionsnummer)"
	};
	var param2 = new SqlParameter("@Kundennummer", SqlDbType.Int){
		Direction		= ParameterDirection.Input,
		SourceColumn	= "Kundennummer",
		SourceVersion	= DataRowVersion.Original
	};/*
	...
	*/
	sqlCmdUpdate.Parameters.Add(param4);
	var param5 = new SqlParameter("@Anzahl", SqlDbType.Int){
		Direction		= ParameterDirection.Input,
		SourceColumn	= "Anzahl"
	};
	sqlCmdUpdate.Parameters.Add(param5);
	sqlAdp.UpdateCommand = sqlCmdUpdate;
	return(sqlAdp);
}

So weit, so gut. Ich würde aber gerne statt der neuen 'Anzahl' die Differenz zwischen dem alten Wert und dem neuen zuweisen. Value = Original - Current. Leider sehe ich nicht, wie ich auf die aktuelle Datenzeile innerhalb des Datenadapters zugreife. Um Hilfe wird gebeten. 🙁

15.03.2011 - 19:03 Uhr

verwendetes Datenbanksystem: mssql Express 2008

Hallo,

ich habe ein SELECT, bei dem verschiedene Werte mittels Unterabfrage gesetzt werden.

SELECT DISTINCT
D1.KndNr	AS Kunde,	
[…]
Zuzahlung = D8.Betrag,
Brutto    =	CASE D5.Vorgang
			WHEN  1	THEN D2.Anzahl*(D2.Verkaufspreis+D8.Betrag)
			WHEN -1	THEN
			CASE D1.BerArt
				WHEN 'U' THEN D2.Anzahl*(D2.Verkaufspreis+D8.Betrag-D2.Pfand)
				WHEN 'E' THEN D2.Anzahl*D2.Verkaufspreis
				[…]
				ELSE 0
			END
		ELSE 0
		END,
Netto […]

Die Zuweisung D8.Betrag zu Zuzahlung gelingt ohne Probleme, ebenso die Verwendung im ersten CASE-Zweig für D5.Vorgang = 1. Im Zweig D5.Vorgang = -1 fehlt der Wert aber. Das heißt der Brutto-Wert wird so berechnet, als wäre der Wert D8.Betrag = 0. (isserabernich) X(
Wie kann ich sicherstellen. dass der Wert an dieser Stelle korrekt zugewiesen ist?

22.02.2011 - 14:03 Uhr

Hallo xxxprod,

Danke für die schnelle Antwort:

So geht's:

convert([money],(coalesce(case when [Feld02]='a' then [Feld01] when [Feld02]='q' then [Feld01]/(12)  end,(0))))

Wie man sieht, muss case nur etwas anders formuliert werden. :evil:

22.02.2011 - 13:11 Uhr

verwendetes Datenbanksystem: mssql

Hallo

In einer Tabelle möchte ich ein berechnetes Feld einfügen.
Die Berechnung soll in Abhängigkeit vom Inhalt eines anderen Feldes erfolgen.
Meine Vorstellung davon sieht wie folgt aus:

CASE Feld02 WHEN 'a' Feld01 WHEN 'b' Feld01/3 ELSE 0 END

Funktioniert zwar innerhalb eines SELECT nicht aber als Ausdruck einer berechneten Spalte.
Die Beispiele, die ich im WEB bzw. in 'SQL-Server Programmierung' gefunden habe, sind trivial.
Über Feld1 * Feld2 geht das nicht hinaus. Sind da komplexere Ausdrücke überhaupt möglich?

Danke und Gruß

21.09.2010 - 13:59 Uhr

Hallo,

leider bekomme ich aus dem VirtualPC-XPMode unter Win7/32 kein Netzlaufwerk auf ein freigegebenes Laufwerk auf einem Win2003-Server.
Ich habe z.Z. folgende Geräte im Netzwerk:

  • WIN-Server 2003
  • PC mit Win7/32
  • Virtuelles XP auf dem PC
  • Fritzbox

Ich kann von jedem dieser angegebenen Geräte jedes andere anpingen und auch die Fritzbox sieht alle Geräte einschließlich der XP-Box.
Versuche ich unter der XP-Box mittels Explorer ein Netzlaufwerk auf dem Server zu verbinden, erscheint der dazu gehörende Dialog nur für den Bruchteil einer Sekunde (gerade so, dass man es noch sieht) und das war es dann. Wähle ich aus dem ExplorerMenü Extras->Netzlaufwerk verbinden, passiert gleich gar nichts.
Die Firewall der XP-Box ist aus.
Ins INternet kommt man aus der Box ohne Probleme.
Die Netzwerkeinstellung der Box steht auf den eingebauten Kontroller.
(Stelle ich dort NAT ein, geht gar nix mehr.)

Meine Frage ist nun, wie man sich leicht denken kann 😦, wie bekomme ich das hin?

Danke und Gruß

01.06.2010 - 19:51 Uhr

Sortierung ist abgeschaltet. 8o

Sicher?

DGrV.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;

Liefert bei mir genau das, was Du suchst. 🙂
Wenn ich's weglasse, erhalte ich ebenfalls die nichtmittige Zentrierung.

26.05.2010 - 21:46 Uhr

Hallo,

habe vor einiger Zeit hier im Forum ein paar Bemerkungen zum Erstellen einer SQLConnection gelesen, die ich jetzt nicht wiederfinde. Es geht darum, dass ich mehrere MDI-Childforms mit einer Connection versorgen will und mir nun Gedanken mache, wo ich die herbekomme. Soll ich die in eine eigene Klasse packen, die ich instanziiere oder hole ich mir die mittels Methode aus einer statischen Klasse. So habe ich es jetzt erstmal realisiert. So weit ich mich ganz vage erinnere, gibt es zu dieser Vorgehensweise begründete Einwände. Welche? Ich denke, das Thema sollte hier schon mal diskutiert worden sein, finde aber nichts Passendes. Ein Link auf den einen oder anderen Thread zum Thema wäre hilfreich. 😁

Danke und Gruß

26.03.2010 - 18:12 Uhr

Hallo Sven M.

soweit mir bekannt, ist das nicht möglich. Habe zumindest nach längerer Suche auch nichts finden können und mir mit einem zusätzlichen Childform, dass ich wie 'ne Leinwand an und ausknipse geholfen.

21.02.2010 - 19:46 Uhr

Hab ich doch schon gemacht. 😁 Man konnte sie ja zum Glück noch abfragen. <puh> Trotzdem würde ich gerne wissen, wieso sowas vorkommen kann und das nicht nur, weil ich von Hause aus neugierig bin. 8)

21.02.2010 - 19:12 Uhr

Hallo,

habe eine Paradoxtabelle (5.0) im System, die etwas aus dem Ruder gelaufen ist. Die Datei läßt sich ohne Weiteres benutzen, d.h man kann Datensätze hinzufügen, ändern und auch löschen. Man kann sie auch abfragen und erhält alle in ihr enthaltenen Datensätze zurück. Das Tabellenreparaturprogramm TUtility jault aber rum, von wegen beschädigtem Header und unpassender Dateigröße. Was auch nicht weiter verwundert, wird ihre Größe vom Explodierer doch mit 4 149 289KB angegeben. Und das, obwohl PDoxTabellen nur 2GB groß sein können. 8o Wie kann so etwas passieren?

PS. Bitte keine Kommentare, dass Pdx-Tabellen nicht mehr zeitgemäß seien. Is mir bekannt. 😜

04.02.2010 - 18:40 Uhr

"Deshalb gelte es hinsichtlich aller jüdischen Vermögen »rechtzeitige Sicherungsanordnungen zu treffen«, wenn die Ämter Anhaltspunkte für eine beabsichtigte Auswanderung gewännen."

02.02.2010 - 23:31 Uhr

Hallo,

wir verwenden ausschließlich Dell-Kisten. Ich sitze an einem Optiplex 620. Der einzig vorhandene PCIe-Steckplatz ist so weit oben, dass darüber in der Gehäuserückwand kein Platz für ein zweites Slotblech ist. Das ist eigentlich schon das ganze Dilemma. Da will ich mir nun endlich mal 'ne richtige Grafik-Rakete kaufen und dann scheitert das an so einem Sch... X(

PS. Jetzt weiß ich gar nicht, was ich mit dem vielen Geld anstellen soll. 8)

02.02.2010 - 11:29 Uhr

Hallo zusammen,

ich suche eine Grafikkarte, deren Steckleiste nicht links, wenn man auf's Slotblech schaut, sondern rechts ist. Gilt natürlich nur für solche Karten mit doppeltem Slotblech. Gibt's sowas überhaupt?

07.12.2009 - 13:49 Uhr

...convertiere in ein decimal, teile durch 1000, mach ein .ToString(..) inkl format angabe (ich glaub "{0:-8}", bin mir aber jetzt nicht ganz sicher) und ersetze den dezimaltrenner durch ein minus.

Substring tut es aber auch.

string strOutput = strInput.Substring(0, 4) + "-" + strInput.Substring(4, 3);

8o Nee, geht doch nicht.

04.12.2009 - 21:43 Uhr

Hallo,

vielen Dank an alle für die schnellen Antworten.
@preli
Der Grund liegt beim GF. Der will auf seinen Listen fortlaufende Nummern sehen. Das ist alles.
Deine Lösung hatte ich tatsächlich schon auf'm Schmierzettel stehen und ohne nähere Betrachtung verworfen.
Das ID+1 hat mich irritiert. Das lag an der von mir vorab festgelegten Vorgehensweise. Ich wollte erst alle Lücken im Kundennummernfeld ermitteln und dann die nächste zu Verwendenden raussuchen. Für Lücken, in denen mehr als eine Nummer fehlt, ist die +1-Variante dann nicht brauchbar. Für min(KundenID+1) klappt es aber wunderbar. 😃

@Florian
Wenn man ID+1 in der WHERE-Klausel aus performancegründen vermeiden sollte, dann kann ich doch gleich meinen Cursor weiterbenutzen. Es wird vermutlich nicht übermäßig oft benutzt werden. Mal wieder 'ne Ergänzung für'n Eimer.


 @"DECLARE @iCursorNr INT  = @iStartWert
   SET     @iKundenNr 	   = @iStartWert
   DECLARE KndCursor CURSOR FOR
	SELECT DISTINCT D1.KndNr
	FROM tblKunden D1
	WHERE D1.KndNr > @iStartWert
	FOR READ ONLY
   OPEN KndCursor
   WHILE(@iKundenNr = @iCursorNr)
   BEGIN
	SET @iKundenNr = @iKundenNr + 1
	FETCH Next
	FROM KndCursor
	INTO @iCursorNr
   END
   CLOSE KndCursor
   DEALLOCATE KndCursor";

Der Startwert ist Benutzereingabe -1.

Der Cursor hat den Vorteil, dass er mir, nach überschaubarer Ergänzung, eine Liste ALLER fehlenden Nummern liefern könnte. Was spräche gegen die Verwendung des Cursors?

04.12.2009 - 14:32 Uhr

verwendetes Datenbanksystem: SQL-Express 2008

Hallo,

in einer Kundendatei mit etlichen 10000 Datensätzen sind die Kundennummern nicht fortlaufend vergeben.
Wie man die nächste oder die vorhergehende Nummer, ausgehend von der aktuellen, ermittelt, ist keine große
Sache. Allerdings möchte ich die vorhandenen Lücken auffüllen und benötige daher von der aktuellen Nummer
ausgehend die nächste nicht vergebene Nummer. Gelöst habe ich dies mit Hilfe eines Cursors, was auch tadellos funktioniert.
Wofür ich aber keine Lösungs finde: Wie realisiert man dies mittels SELECT, will sagen, wie wähle ich den nächsten nicht vorhandenen Datensatz?

11.11.2009 - 22:13 Uhr

Hi

Ein super Tool ist der Enterprise Architect. Ansonsten kann das gute alte Visio natürlich alles (weil's sich an keine Regeln hält...).

Grüße
Flo

Visio ist wirklich ein schönes Werkzeug. Leider kommt es aber nicht mit SQL2008 klar. Zumindest in der aktuellen Version nicht. 🙁

28.10.2009 - 20:38 Uhr

Super Tip. Danke. 😁

28.10.2009 - 09:46 Uhr

Hallo,
für bool gibt es keinen eingebauten Formatierer.

Nee, ne? Das glaub ich doch jetzt nicht. X( 8o

28.10.2009 - 00:44 Uhr

Hallo und Guten Morgen,
eine Textbox die an ein numerisches Datenfeld gebunden ist zu formatieren bereitet i.A. kein Problem. Auch bei Datumsfeldern liefert die Onlinhilfe was man braucht. Lediglich zu logischen Feldern habe ich nichts finden können. Weder hier noch bei Tante Google.


fldKndRbt.DataBindings.Add("Text", bsKundenstamm, "KNDRBT", true, DataSourceUpdateMode.Never, "", "true ? Ja : Nein");

Den Formatstring habe ich nur so reingeschrieben, um zu verdeutlichen, was ich gerne hätte. Kann mir hier jemand behilflich sein und mir sgaen, was da wirklich stehen muss?

Danke und Gruß

17.10.2009 - 22:40 Uhr

Ich habe aber immer noch den Datensatzmarkierer in der ersten Spalte.
Kann man den auch ausblenden?


dataGrid1.RowHeadersVisible = false;

15.10.2009 - 10:16 Uhr

das ist eher ein fall für den virtual mode 😉

Irgend wie erschließt sich mir die Ironie in Deiner Antwort nicht - aber vielleicht ist ja auch gar keine drin? 8) Keine Idee, warum die Aktualisierung nicht immer funktioniert?

14.10.2009 - 11:15 Uhr

Hallo,

habe eine Auftragstabelle und eine Positionstabelle wie üblich 1:m verknüpft.
Der Positionstabelle habe ich mehrere berechnete Felder hinzugefügt. Z.B.:


dtPositionen.Columns.Add("KtrUmsatz",typeof(decimal) ,"IIF(KndRbt = 0,(PosEinheiten*VK),0)"); 

Der Auftragstabelle füge ich dann eine Summenspalte hinzu:


dtAuftrag.Columns.Add("Umsatz",typeof(decimal), "ISNULL(Sum(Child(Auftrag2Positionen).KtrUmsatz),0)");

Dieses Feld binde ich an ein Label:


lblKtrUmsatz.DataBindings.Add("Text",	bsAuftrag,"Umsatz",true, DataSourceUpdateMode.Never , "...", "0.00");

Wenn ich nun durch die BindingSource bsAuftrag scrolle, wird die Anzeige im Label lblKtrUmsatz - und anderen - korrekt aktualisiert.
So weit so gut.
Nun enthält die Auftragstabelle z.Z. etlich tausend Datensätze, die Positionstabelle bis zu 100 Positionen je Auftrag.
Die kann ich mir schlecht alle immer in den Speicher laden. Also hole ich mir immer nur einen Masterdatensatz, in dem ich die Tabellen
leere und anschließend wieder fülle.


daAuftrag = get_DAAufträge(SqlCon, iAuftragsNr);
dtAuftrag.Clear();
daAuftrag.Fill(dtAuftrag);

Funktioniert soweit, obwohl ich mir nicht so ganz sicher bin, ob das die richtige Vorgehensweise ist.
Das Problem, dass ich mir damit eingehandelt habe ist, dass das lblKtrUmsatz genau dann nicht aktualisiert wird, wenn der neu anzuzeigende Wert 0 ist. (nicht null)
In diesem Fall bleibt der vorherige Wert stehen. Ich habe zwar eine Lösung gefunden, die ist aber so sehr Marke Brechstange, dass ich mir erstmal dachte: Frag doch mal Leute, die sich mit so was auskennen. 😁

05.10.2009 - 11:51 Uhr

Hallo Jürgen,

danke für die schnelle Antwort. 😁 Da ich 'ABS' auf Tabellenebene benutze war mir der Gedanke, dass DataColumn.Expression 'ABS nicht unterstützt gar nicht gekommen. Hab's mit IIF gelöst.

Danke und Gruß

05.10.2009 - 11:23 Uhr

Hallo,

zu einer Tabelle füge ich eine neue Spalte hinzu:


dtPositionen.Columns.Add("KtrUmsatz",typeof(decimal) ,"Abs((PosEinheiten)* (VK*(KndRbt)))");

Mein Problem hierbei ist, dass die Werte aus der Spalte 'KndRbt' negativ seine können, ich den Wert in der Spalte KtrUmsatz aber in jedem Fall positiv brauche. Entferne ich 'Abs' aus dem String, bekomme ich aller Werte korrekt in die neue Spalte übertragen, füge ich es ein, sind aller Werte in der Spalte null. Eine Fehlemeldung bekomme ich da leider auch nicht. Weiß jemand, warum das so nicht geht bzw. wie ich es doch noch hinbekomme?

Danke und Gruß

20.09.2009 - 00:09 Uhr

Char userKey = e.KeyChar;
if(Control.ModifierKeys == Keys.Alt) {
	switch(userKey) {
		case (char)Keys.B : ActiveControl = txtBenutzername;
		break;
		default : break;
	}
	e.Handled	= true;
}

Vielleicht hilft das ja für's Erste.

20.08.2009 - 11:40 Uhr

Kann es vielleicht sein, das der PK schon vorher verwaist war? Also, das das Ding gar nicht an der Tabelle hing? Das wäre die einzig logische Erklärung.

Nee, kann eigentlich nicht sein, weil ich die Tabelle heute schon mal neu erstellt hatte. Ich hatte ursprünglich Daten aus einer anderen Tabelle in diese übernommen und dabei festgestellt, dass bei einem Feld (decimal) alle Nachkommastellen abrasiert waren, dessen Quelldatentyp float ist. Hatte ich keine Erklärung für und habe das entsprechende Feld in der neuen Tabelle in float geändert (im Script). Beim dann folgenden Erstellen, kam es dann zu dem beschriebenen Fehler.

20.08.2009 - 11:08 Uhr

Hallo Humsch,

die Frage, die sich mir stellt ist: Wie hast Du denn die Tabelle gelöscht? In aller Regel wird das durch ein "Drop Table" realisiert, und wenn ich nicht falsch liege, dann sollten die PK Constraints damit mit gelöscht werden.

Frage ich mich auch. Das DROP Table hab ich mir vorher generieren lassen und dem Script zur Neuerstellung vorangestellt.


IF  EXISTS(
	SELECT * FROM sys.objects
	WHERE object_id = OBJECT_ID(N'[dbo].[TblName]') AND
		type in (N'U'))
	DROP TABLE [dbo].[TblName]
GO

Das hat schon etliche Male, auch bei diversen anderen Tabelle, gut funktioniert.

Aber egal, es ist wie es ist: Wenn noch ältere PK Constraints vorhanden sind, dann solltest Du diese auch löschen (auch in den Systemtabellen).

Werd erst mal 'ne Sicherungskopie erstellen. 😁

20.08.2009 - 10:27 Uhr

verwendetes Datenbanksystem: SQL 2008 Express

Hallo,

habe eine Tabelle mit PK gelöscht und anschließend per Script neu erstellt. Hab ich versucht. Ging aber nicht. Die Erstellung wurde mit der folgenden Fehlermeldung verweigert:
"In der Datenbank ist bereits ein Objekt mit dem Namen 'PK_TblName' vorhanden."
In der Tabelle sys.objects ist das Objekt PK_TblName auch tatsächlich noch eingetragen, obwohl die entsprechende Tabelle gelöscht ist.

Kann ich den Eintrag in der sys.objects bzw. sys.key_constraints einfach löschen? Oder gibt es da eine sinnvollere Alternative, dass Problem aus der Welt zu schaffen?

Danke und Gruß

13.08.2009 - 19:19 Uhr

Hallo RobS,

vielen Dank für Deine detaillierten Ausführungen. So hab ich es jetzt auch kapiert und hinbekommen. Mit einer kleinen Änderung:

(Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')

Sonst kriegt man die Rücktaste auch noch abgewürgt. 😁

13.08.2009 - 10:13 Uhr

Die Lösung von RobS erschließt sich mir irgendwie nicht. Die Eingabe im DataGridView dgv soll auf Ziffern beschränkt werden? Und was ist jetzt dgv_pruefart?

11.08.2009 - 11:54 Uhr

wenn ich jetzt das ganze starte, in die erste LabelTextBox was eintrage und Return drücke, hüpft er zur nächsten usw, so wie eben erwartet. 👶

Hallo,

vielen Dank für Deine Unterstütung, auch an die anderen, die mir hier geantwortet haben.

Die Lösung ist ganz einfach:


if(e.KeyChar	== (char)Keys.Enter) {
	SendKeys.Send("\t");
	e.Handled = true;
}

Hab ich hier im Forum gefunden. Wie man sieht, lohnt das Stöbern in alten Beiträgen.

07.08.2009 - 10:46 Uhr

...falls dein Control LabelTextBox heisst, dann musst du nicht auf das KeyPress der LabelTextBox reagieren, sondern auf das KeyPress der TextBox der LabelTextBox.. Das hatte ich ja urspünglich so versucht. Funktionierte aber nicht, weshalb ich ja dann auf das KeyPress der LabelTextBox ausgewichen bin. Was allerdings genau so wenig zum Erfog führte.

Kannst ja die TextBox des Controls als Property ausgeben und dann weist du das Event eben LabelTextBox.TextBox zu. Dann sollte das eigentlich auch funktionieren ?( ?( ?(

04.08.2009 - 16:57 Uhr

jibbets da auch son KeyPreview wie bei Forms?
Oder ist das Event gar nicht registriert?

Nein, ein KeyPreview wie bei Forms gibt es nicht.
Das Ereignis ist registriert:

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LabelTextBox_KeyPress);
04.08.2009 - 16:39 Uhr

wirdn

  
        this.ProcessTabKey(true);  

ühaupt aufgerufen?

Gute Frage. Nee, wird nicht aufgerufen. Für das bdStE wird anscheinend gar kein Tastaturereignis aufgerufen. 8o

04.08.2009 - 16:02 Uhr

vermutlich mussteden Code iwie in dein UserControl verlegen

Das hab ich bereits getan.

private void LabelTextBox_KeyPress(object sender, KeyPressEventArgs e) {
	Char userKey	= e.KeyChar;
	if(userKey == (char)Keys.Enter) {
		// SelectNextControl(this.ActiveControl, true, true, true, true);
		this.ProcessTabKey(true);
		e.Handled = true;
	}
}

Hilft aber nichts. X(

04.08.2009 - 15:19 Uhr

Hallo,

das Thema ist zwar schon etwas älter, da ich aber ein ähnliches Problem habe und keinen Neues aufmachen wollte, hänge ich mich mal hier ran.

Mittels:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
	Char userKey	= e.KeyChar;
	if(userKey == (char)Keys.Enter) {
		// SelectNextControl(this.ActiveControl, true, true, true, true);
		this.ProcessTabKey(true);
		e.Handled = true;
	}
}

kann man die Enter-Taste zum Navigieren durch mehrere Textboxen benutzen. Das funktioniert auch ohne Weiteres. Da ich sehr viele Textboxen benötige, die alle mit einem Label versehen sein müssen, hab ich mir ein benutzerdefiniertes Steuerelement gebastelt, das aus einer Textbox und einem Label besteht. Leider funktioniert der oben angegebene Codeschnipsel dann nicht mehr. Außer einem lästigen ping-geräusch passiert gar nichts. Was mache ich hier falsch?

Danke und Gruß

21.07.2009 - 20:21 Uhr

...Kann das iwie nich glauben, dass das nicht geht...

Ich auch nicht...


				switch(key) {
					case Keys.Return	: {
						//ActiveControl = DGrV;
						DGrV.Select();
						bsPositionen.MoveFirst();
						break;
					}

Wie man sieht, ziemlich belanglos.

Gruß Humsch