Die Antwort schrieb:
Oh man ....
Das hat keine 2sec gedauert bis ich die offizielle C++ lib für postgresql auf der offiziellen download seite gefunden habe.
link: http://www.postgresql.org/download/
Kann ich nur zustimmen, bevor ihr Fragen stellt...sucht doch mal vernünftig im Internet
Jo. Also.
Habe mir soeben SQL Server 2005 Reporting Services angesehen. Alles ganz toll, bis auf den Report Designer. Oder anders gesagt: Katastrophe.
Kennt ihr ein Tool mit dem man mit ähnlich wenig Aufwand Reports zusammenbasteln kann? Was es können sollte:
* Web Interface (über IIS)
* Rechteverwaltung (wer darf was sehen/editieren/machen), Gruppen basiert ("Windows integrated security" als Authentifizierung wäre auch toll)
* GUI driven Report Designer (Standalone oder übers Web)
* "Schemas" bzw. "Models" sollten NICHT von im SQL Server definierten Relations *abhängig* sein. Unterstützend dürfen diese aber gerne ausgewertet werden.
* Daten aus mehreren Datenbanken sollten im selben Report verwendbar sein
* Relations sollten cross-database funktionieren (ja, wir haben cross-database relations, leider)
* Views sollten als Quelle ansprechbar sein
* evtl. gleich "pass-through-SQL" als Quelle
* SAP Anbindung wäre ganz toll, ist aber kein Muss
* Parametrisierbare Reports (Filterbedingungen)
* Anzeige von "Auswahllisten" (automatisch aus einer Tabelle gefüttert) für "in list" Filter
Was auch noch sehr wünschenswert wäre: "dynamisch konfigurierbare" Reports.
Also z.B. wenn ich einen Report "Verkaufte Produkte nach Land, Bundesland, Produktkategorie" wäre es toll wenn man z.B. (ohne einen eigenen Report generieren zu müssen) "Bundesland" verstecken kann, oder sogar die Reihenfolge ändern, also z.B. aus "nach Land, Bundesland, Produktkategorie" wird "Land, Produktkategorie" oder auch "Produktkategorie, Land".
Das Entwerfen von Reports darf ruhig auch etwas SQL Kenntnisse erfordern. Das ansehen und "dynamisch konfigurieren" natürlich nicht.
Mir wäre sehr geholfen wenn ihr mir Produkte nennen könntet die zumindest die meisten meiner Forderungen erfüllen, und mit denen ihr (gute) Erfahrungen gemacht habt.
Hast du dir über die Beziehungen schon Gedanken gemacht?
Ich würde die (ohne genauere Angaben aus dem Bauch heraus) wie folgt setzen
Mitarbeiter - Standort <-> n : 1
Mitarbeiter - Hardware <-> m : n
Mitarbeiter - Software <-> m : n
Standort - Hardware <-> 1 : n
Zusätzlich würde ich anstatt der Detail Tabelle eine Tabelle Computer einführen... (evtl. noch Entwicklerboards, Drucker usw...., wenn die Unterscheidung lohnt...)
Das Ergäbe dann für mich die Beziehung
Hardware - Computer <-> n : 1
Hardware - Drucker <-> n : 1
...
Ansonsten brauchst du noch die Beziehungstabellen bei m : n Beziehungen...
Grüße
zeigerzeiger
Hallo,
ich habe eine weitere Frage, vielleicht hat da wer eine Idee...
Also, ich speichere so ca. 1000-2000 Einträge pro Sekunde per SqlBulkCopy in meine SQL Datenbank. Dabei habe ich bemerkt, das nach ca. 2 Stunden eine "There is insufficient system memory to run this query" Message auftritt, und zwar regelmässig.
Wenn ich mir die Auslagerungsdatei anschaue, seh ich auf sie ab Programmstart langsam an Umfang gewinnt. Bis schliesslich das Programm mit besagter Errormessage abbricht.
Wenn ich danach versuche, per SQL Manager Queries zu machen, bricht er mir ebenfalls ab mit einer System.Outofmemory.Exception.
Also...irgendwie verbrauche ich da massig Arbeitsspeicher, bis er OOM ist. Ich habe aber keine Ahnung wo - kann das die SqlBulkCopy Objekte sein? Der code siet so aus:
DataTable dt = new DataTable();
dt.Columns.Add("SYMBOLNR", typeof(Int32));
dt.Columns.Add("ZEIT", typeof(DateTime));
dt.Columns.Add("BRIEF", typeof(decimal));
SqlBulkCopy bc = new SqlBulkCopy(connString);
bc.DestinationTableName = "SCHLUSSKURSE";
bc.ColumnMappings.Add(new SqlBulkCopyColumnMapping(0, 1));
bc.ColumnMappings.Add(new SqlBulkCopyColumnMapping(1, 2));
bc.ColumnMappings.Add(new SqlBulkCopyColumnMapping(2, 3));
do
{
areBrief.WaitOne(1, false);
if (rfsBrief.Count > 0)
{
RealTimeFeed rf = (RealTimeFeed)rfsBrief.Dequeue();
DataRow dr = dt.NewRow();
dr["SYMBOLNR"] = rf.SymbolNr;
dr["ZEIT"] = rf.Zeit;
dr["BRIEF"] = rf.Kurs;
dt.Rows.Add(dr);
if (dbCntBrief % 500 == 0)
{
SetTextBox2(dbCntBrief.ToString());
bc.WriteToServer(dt);
dt.Rows.Clear();
}
dbCntBrief++;
}
} while (1 != 2);
}
Hat wer eine Idee dazu?
Werde es vermutlich so machen, dass ich eine Regel für jede Aktion Update,Select,Insert schreibe, die dann entsprechend die IP dem benutzer in einer Tabelle zuweist
http://www.postgresql.org/docs/8.1/interactive/functions-info.html
Ich benutze C++/Cli für die Anwendung, und arbeite da mit dem DataSet-Designer.
Dort habe ich all meine SQL-Querys erstellt.
Ich habe aber keine Ahnung wie ich die Querys dann dynamisch erstellen soll, was ja erforderlich ist für Euren Vorschag.
Könnt Ihr mir nochmal helfen?
aber einmal muss ich jetzt auch noch antworten
ob sql oder was anderes ist mir eigentlich egal.
ich wollte eigentlich nur sagen, dass mir die speicherung der daten herzlich egal ist, wenn ich ein dbms einsetze, dann möchte ich dadurch, ich sage mal, "semantische" vorteile.
in erster linie.
also komfortablen datenzugriff und auch bestimmte sicherheiten bezüglich der eingetragenen daten und natürlich, dass die daten auch wirklich gespeichert sind.
geschwindigkeit ist natürlich auch wichtig und bei den falschen datenstrukturen kann der rechner noch so schnell sein...
jenz
Moin,
Ich rufe in meiner Datenbank (mysql) eine PROCEDURE auf.
Diese trägt Werte ein (INSERT) und zusätzlich mach diese
dann ein SELECT um mir 2 Werte zurück zu geben.Beim auslesen
des Results mach ich zb:
if (-1 < mysql_real_query(&mysqlHistoricalDB, statement.c_str(), strlen(statement.c_str()))) {
result = mysql_store_result(&mysqlHistoricalDB);
MYSQL_ROW row;
while ((row = mysql_fetch_row (result)) != NULL) {
for (unsigned int i = 0; i < mysql_num_fields(result); i ++)
printf ("%s ",row[i]);
}
printf("\n");
}
mysql_free_result(result);
Leider kann ich dieses IMMER nur ein mal machen ... Beim zweiten Aufruf
bekomme ich immer:
Commands out of sync; you can't run this command now
Warum? Is der Bufferspeicher nicht leer??
Kann mir das nicht erklären!!
lg
davidwal
Unix-Tom schrieb:
Sind deine tabellen überhaupt innodb oder myisam?
wenn myisam dann gibt es eine Sperre auf Tabellenebene was ich aber auch nicht so gut finde. Überdenke lieber dein Design des Programmes.
Sperren sind immer schlecht.
Mein Test war mit innoDB.
jenz schrieb:
wie wäre es, wenn du der tabelle noch ein spalte "owner" spendierst, die ist immer null, außer, wenn sich die einer geschnappt hat.
beim aufruf machst du dann folgendes:
update <table> set owner = <eindeutige_ownerid> where <table_key> in (select <table_key> from <table> where owner is null limit 0,10);
und danach halt einen
select * from <table> where <owner> = <eindeutige_ownerid>;
die updates sollten ja serialisiert ablaufen...
wenn man das update noch mit einem zeitstempel versieht kann man nicht bearbeitete einträge nach eine bestimmten zeit auch wieder freigeben...
ich mache das so ähnlich für eine verteile simulation, die worker markieren sich so ihre jobs und holen die danach raus...
so kümmert sich das dbms darum, das die jobs immer nur einmal abgearbeitet werden...
Diese Idee hatte ich auch und wollte fragen ob das auch eine alternative war - du bist mir zuvor gekommen - zumal überall wo etwas über locks stand empfohlen wurde sie zu vermeiden^^.
wenn du mir das empfiehlst werde ich das gerne so machen
vielen Dank dafür
Ohne jetzt sqlLite zu kennen, würde ich folgendes vermuten:
Rückgabetyp ist als Struktur implementiert durch die man iterieren kann. Folglich iterierst du durch die Sturktur und schreibst die Dateien via (C++)ofstream oder (C)fwrite in die gewünschte Datei
Einen praxisbezogenen, gut verständlichen Einstieg biete das Buch OLAP verstehen von Helmut Reinke und Helmut Schuster (z.B.: http://www.amazon.de/OLAP-verstehen-Helmut-Reinke/dp/3860634720).
cppprogrammer schrieb:
Bestimmt wurde diese oder eine ähnliche Frage schon oft gestellt, aber ich finde einfach nichts was mir weiterhilft, nicht hier im Forum und auch nicht über google.
Ja, die Frage wird oft gestellt. Daher haben wir eine Antwort auch in der FAQ, die du mal konsultieren solltest...
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
ach scheiß der SQLDriverConnect() hat deshalb gefunzt weil ich oben zeile 16
SQLDriverConnect(dbc, NULL,(SQLCHAR*) pStr, strlen(pStr),outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE);
das "ret = " vergessen habe
so rutscht er natürich durch die fehler behandlung den in ret ist ja noch SQL_SUCCESS vom letzten allochandlering
weil ichs hier ausm forum kopiert habe
also kommando zurück SQLDriverConnect() funt immer noch nich leig immer noch am connecting string als parameter schätze ich