Auf die Gefahr hin jetzt als Idiot da zu stehen. Frage ich doch noch mal nach.
Ich habe auf meinen Server den Remote Debugger gestartet. Der Debugger läuft auf 32Bit weil Target Platform 32Bit.
Dann habe ich die Einstellungen im Remote Debugger auf "Keine Authentifizierung" gestellt und in meinen Visual Studio folgendes konfiguriert:
Start external Program: D:\Local\Path\To\Application.exe
Working Directory: \\Server\Path\To\ (Path ist ein Netzwerk share)
Use Remote Machine: Server
Wenn ich jetzt F5 drücke bekomme ich folgende Meldung:
Fehler
---------------------------
Microsoft Visual Studio
---------------------------
Error while trying to run project: Unable to start debugging.
Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort.
Warum?
Alle Benutzer debuggen ermöglichen (an oder aus versucht)
Authentifizierung ist aus
Und wenn ich Attach to Process mache funktioniert es. Nur dann bin ich lange an dem Teil vorbei den ich debuggen möchte. X(
Woran kann es noch liegen dass sich das Programm nicht aus dem VS starten lässt?
ich versuche grade mir eine Funktion zu basteln, die mir eine Liste an Servern zurück gibt, die im lokalen Netzwerk zur Verfügung stehen, auf denen ein bestimmter Dienst läuft.
Die Funktionsweise soll so ähnlich sein wie die Suche bei einem LAN-Spiel.
Gibt es zu sowas Tutorials, wie so was prinzipiell funktioniert?
ich bin auf der Suche nach einem Weg der mir die Dateien anzeigt die ein bestimmter Prozessgrade liest und schreibt.
Oder besser noch bescheid sagt wenn sich die Liste ändert.
Gibt es so was in fertig?
Mein kleines Testprojekt sieht wie folgt aus:
private void Form1_Load(object sender, EventArgs e)
{
Process[] runnig = Process.GetProcesses();
foreach (Process p in runnig)
{
AdvProc a = new AdvProc(p);
comboBox1.Items.Add(a);
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (((AdvProc)comboBox1.SelectedItem).Proc.HasExited)
comboBox1.Items.Remove(comboBox1.SelectedItem);
else
{
AdvProc p = ((AdvProc)comboBox1.SelectedItem);
this.Text = p.Proc.HandleCount.ToString();
// hier sollen die Dateien gelesen werden...
foreach (ProcessModule m in p.Proc.Modules)
{
listView1.Items.Add(m.FileName);
}
}
}
catch
{
comboBox1.Items.Remove(comboBox1.SelectedItem);
}
}
// damit die Combobox was richtiges anzeigt...
public class AdvProc
{
public Process Proc;
public AdvProc(Process p)
{
Proc = p;
}
public override string ToString()
{
return Proc.ProcessName;
}
}
Wobei ich jetzt nach den Dateipfaden oder Dateihandles suche die der ausgewählte Prozess hat.
Process.Modules gibt leider nur die ganzen geladenen DLLs und das EXE File zurück.
Ich suche aber eher nach dem txt File welces ich im editor geladen habe.
Also dass mit der 2ten Tabelle klingt doch schon mal nach einem vernünftigen Plan... Also quasi die Texte als Variablen übergeben ist wohl am einfachsten...
Denn kannst du die Felder einfach in den Berichtsfuß ziehen...
Formeln kannst du nur auf Berichtsvariablen anwenden, nicht auf TextObjekte...
Oder gibt es einen Bestimmten Grund warum du das Template des Berichtes ändern willst?
Die TextObjekte sind die Festen Texte die du im Crystal Editor einfügst...
Wenn du das Problem mit den Zeilenumbrüchen nicht gelöst bekommst, kannst du vllt. noch die TextObjekte klonen und die Texte untereinander in verschiedene TextObjekte schreiben...
Das Problem dabei ist dass es auf den Festplatten der Kundensysteme oft Zugriffs- und BBerechtigungsprobleme geben soll.
Deswegen soll nach möglichkeit nichts auf die lokale Festplatte geschrieben werden. Also auch keine TempFiles.
Ich hatte zeitweilig mit dem Gedanken gespielt einfach ein RAM-Drive für die Laufzeit zu mappen wo das Temp Zeug hinfällt. Nur doof dass man dazu auch mehr Rechte braucht als ich dort haben werde. :(
ich versuche grade eine Mimik zu bauen, die Berichte aus der DB laden kann.
Ich bin auch schon so weit dass ich die Berichte hoch und runterladen kann.
Ich habe allerdings jetzt das Problem, dass die Berichte nicht auf die Festplatte geschrieben werden sollen. Also muss ich sie irgendwie aus einem MemoryStream in ein ReportDocument umwandeln.
Hat jemand so was schon mal gemacht oder ne Idee wie das funktionieren könnte?
// Schnipsel: So hab ich mir das vorgestellt.
// Nur leider nimmt Load keine Binärdaten an sondern nur Pfade
byte[] ReportData = GetReportFromDB(ID);
using (ReportDocument Doc = new ReportDocument())
{
Doc.Load(new MemoryStream(ReportData));
}
Doc.PrintToPrinter(0, true, 1, 1);
Das Programm ist so angelegt dass es beim selektieren alle Zeilen ignoriert die das Lock auf 3 gesetzt haben. Das tut es in jeder Tabelle. Ich habe nur versucht das setzen aus dem Programm in die DB zu verlagern.
Die Locked Zeilen können über einen Schalter wieder angezeigt werden. Wenn der User nun merkt, dass er eine falsche Zeile gelöscht hat kann er sie wieder holen, ausser sie wurde bereits überschrieben.
Die Spalten sind immer vorhanden, da auch diese automatisch angelegt werden.
Ich habe das Problem auch schon gelöst. Es hing an einem Flag was gesetzt werden muss, damit der Trigger den Fehler nicht schmeisst der gecatcht werden soll...
SET XACT_ABORT OFF;
Den Rest des Codes erspar ich eich mal.
Ziel des ganzen war dass ich an jeder Zeile sehen kann wer / wann zuletzt an daran geändert hat.
ich habe mir einen Datenbank-Trigger angelgt, der automatisch Trigger in einer neuen Tabelle anlegen soll falls diese nicht vorhanden sind.
Allerdings kann ich nun Tabellen nicht mehr ändern weil ich auf einen Fehler laufe, da der Name des Triggers schon vergeben ist.
CREATE TRIGGER [Create_DefaultTriggers]
ON DATABASE
AFTER CREATE_TABLE
AS
BEGIN
DECLARE @data XML;
SET @data = EVENTDATA();
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @TableName varchar(100), @Statement varchar(1000);
SET @TableName = EVENTDATA().value
('(/EVENT_INSTANCE/ObjectName)[1]','varchar(100)');
-- Insert statements for trigger here
IF NOT (@TableName LIKE 'System%')
begin
BEGIN TRY
SET @Statement =
' CREATE TRIGGER [dbo].[Delete' + @TableName + ']' +
' ON [dbo].[' + @TableName + ']' +
' INSTEAD OF DELETE AS' +
' BEGIN' +
' SET NOCOUNT ON;' +
' DELETE FROM [dbo].[' + @TableName + '] WHERE ID in (SELECT ID FROM DELETED WHERE Lock = 3);' +
' UPDATE [dbo].[' + @TableName + '] SET Lock = 3 WHERE ID in (SELECT ID FROM DELETED);'+
' END';
EXECUTE (@Statement) AS LOGIN = 'sa';
SET @Statement =
' CREATE TRIGGER [dbo].[Update' + @TableName + ']' +
' ON [dbo].[' + @TableName + ']' +
' AFTER INSERT,UPDATE' +
' AS' +
' BEGIN' +
' SET NOCOUNT ON;' +
' UPDATE [dbo].[' + @TableName + '] SET LastChangeOn = GetDate(), LastChangeBy = user_name() WHERE ID in (SELECT ID FROM Inserted);' +
' END';
EXECUTE (@Statement) AS LOGIN = 'sa';
END TRY
BEGIN CATCH
END CATCH
end
END
Ich hätte ja erwartet dass die Statements nur bei Create Ausgeführt werden und dass die Trigger mit den Tabellen Gelöscht werden.
Eigentlich suche ich nach einer Möglichkeit einen tabellenübergreifenden Zähler zu bauen.
Am liebsten wäre es mir halt wenn das in einer Funktion passiert, die quasi mitzählt wie oft sie aufgerufen wurde...
ich möchte mir eine Funktion in SQL bauen die einen Wert aus einer Tabelle holt, den Wert hoch zählt und den neuen Wert an selbiger Stelle zurück schreibt.
Dabei bin ich auf folgendes gekommen:
CREATE FUNCTION GetNextRowId()
returns bigint
as
begin
declare @lastval bigint
set @lastval = (select RowVal from dbo.testtab)
if @lastval is null set @lastval = 1
set @lastval = @lastval + 1
update dbo.SupplyRowId set RowId = @lastval
return @lastval
end
dazu sagt das Management Studio:
Meldung 443, Ebene 16, Status 15, Prozedur GetNextRowId, Zeile 15
Ungültige Verwendung eines 'UPDATE'-Operators mit Nebenwirkungen innerhalb einer Funktion.
Darf ich in Funktionen prinzipiell kein update machen?
Ich habe gerade heraus gefunden dass meine Childs NIEMALS den fokus bekommen... die Leiste oben am ChildFenster bleibt immer grau, daher wohl auch kein MdiChildActivate...
Nur leider kann ich mir nicht erklären warum das so ist...
Hat jemad ne Idee??
Also ich versuch noch mal mit einer ausführlichen Erklärung...
Ich habe ein MDI-Parent mit einer Toolbar und ich habe x MDI Childs...
Jetzt möchte ich feststellen wann sich das aktive MDI Child ändert und natürlich auch welches das neue ist...
Das Problem dabei ist aber dass ich im MDI wissen möchte ob eines der darunter liegenden Fenster grade Aktiv ist... oder ob sich das Property
"ActiveMdiChild"
ändert...
Nur leider bekommen die Fenster ja nie den Fokus, jedenfalls springt das event nicht an wenn man in ein ChildFenster reinklickt...