Leider gerät mein Programm bei dieser funktion in eine Endlosschleife kann mir leider nicht erklären warum habe vllt leicht was übersehen ?
Ich benutze pqxx in der Version 3.
bool navbar::get_elements(const char* pg_con)
{
result R;
connection *conn = new connection(pg_con);
work T(*conn);
R = T.exec("SELECT name,link,id,parent_id FROM navbar");
T.commit();
int arr;
for(result::const_iterator query = R.begin(); query != R.end(); query++){
if(R.size() > 0){
Menu_data[arr][1]= query["id"].as<std::string>();
Menu_data[arr][2]= query["name"].as<std::string>();
Menu_data[arr][3]= query["link"].as<std::string>();
Menu_data[arr][4]= query["parent_id"].as<std::string>();
arr++;
}else{
conn->disconnect();
delete conn;
return false;
}
}
conn->disconnect();
delete conn;
return true;
}
Habe mein code noch leicht verändert ohne erfolg
SideWinder schrieb:
Ich habe ja schon viele Schreibweisen gesehen, aber "PostGreSQL" erscheint mir am übelsten gelungen.
Laß ihn. Lt. Ansi-SQL sind Bezeichner case insensitive.
Wenn eine Änderung stattfindet werden nicht nur die Redo-Informationen (das After-Image) sondern auch die Undo (Before-Image) gespeichert. Bei einem Delete existieren die Info's im Log die notwendig sind den Datensatz wiederherzustellen (Before-Image), bei einem Insert nur das After-Image um den noch nicht (vollständig) ausgeführten Schreibbefehl erneut ausführen zu können und ein Update benötigt beide Images.
Wenn ein Crash erfolgt muß das System beim Wiederhochfahren automatisch ein Crash-Recovery durchführen: die winner-Transaktionen (welche committed sind) müssen nachgefahren werden und die Änderungen der loser, welche es nicht zum Commit geschafft haben müssen zuvor getilgt werden. Wenn die Transaktion deines Update-Befehls nicht abgeschlossen wurde aber aufgrund der steal/not force-Straegie die Änderungen schon auf der Disk sind muß eben das Before-Image des Update-Befehles wieder eingespielt werden.
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung 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.
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) 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.
Hi,
ich habe nun die Spaltennamen mit angegeben. Der Fehler lag wohl darin, dass ich in der Tabelle eine ID-Spalte (autoincr.) habe, die ich in meinen Parametern natürlich nicht angegeben habe.
Jetzt ist aber ein neues Problem aufgetreten. Werde einen neuen Thread erstellen...
Danke...
Torsten
Cpp_Junky schrieb:
Der beschriebene Vorgang würde auf den meissten Datenbank-Systemen so auch gar nicht funktionieren. Der würde beim Speichern gleich einen Concurrency Error rausschmeissen und User B müsste den Datensatz neu laden oder abbrechen.
würde er nicht, wenn man zwei getrennte transaktionen verwendet. eine zum laden der daten, und eine zweite wenn der user auf "apply" drückt.
was man üblicherweise so macht.
grund: der user kann sich beliebig lange zeit lassen, bis er die geänderten daten "speichert", und man will normalerweise vermeiden transaktionen für lange zeit offen zu halten.
danke für Eure Antworten.
Hab`s jetzt gefunden wie es geht.
GRANT berechtigung_art [(spalte)] ON {datenbank.tabelle}TO benutzername;
Beispiel:
User = Hans_Wurst
Datenbank = Fahrzeuge
Tabelle = Pkw
Gewährung von UPDATE nur auf Spalte 'Reifen'
GRANT UPDATE (Reifen) ON Fahrzeuge.Pkw TO Hans_Wurst;
C-Bär
Der ist nicht "nötig", das ist ein Feature. So kannst du z.B. erzwingen das die Kombination Vorname + Nachname eindeutig ist. Auf manchen Datenbanken wird auch der Index so optimiert, das Abfragen über die zwei Felder beschleunigt werden:
select * from tabelle where vorname = 'Horst' and nachname = 'Hummel'
DBX sind dbExpress Komponenten die laut RAD Studio Features Matrix
http://www.embarcadero.com/products/cbuilder/cbuilder-feature-matrix.pdf
erst ab der Enterprise Version "benutzbar" sind und bei der Professional Version bei manchen nur lokale Verbindungen zulässt.
Kannst dir auch noch die OpenSource ZEOS-Kommponenten ansehen evtl. ist das eher was für dich
http://zeos.firmos.at/portal.php
Hab so was ähnliches mal mit c# gemacht, sollte für dich also kein Problem sein das ganzu in cpp zu implementieren.
private void BtnSend_Click(object sender, EventArgs e)
{
// used to build entire input
StringBuilder sb = new StringBuilder();
// used on each read operation
byte[] buf = new byte[9000];
// delate last data gried view
dataGridView1.Columns.Clear();
// build the command string and prepare the web page we will asking for
string strCommandUrl = string.Empty;
strCommandUrl = @"http://www.******.****/mimo/phptest/client_query.php5?table=";
strCommandUrl += strTable.Text;
strCommandUrl += "&query=";
strCommandUrl += strQuery.Text;
strSendingCommand.Text = strCommandUrl;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strCommandUrl);
// execute the request
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
string tempString = null;
int iCnt = 0;
do
{
// fill the buffer with data
iCnt = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (iCnt != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.ASCII.GetString(buf, 0, iCnt);
// continue building the string
sb.Append(tempString);
}
}
while (iCnt > 0);
string strTmp = sb.ToString();
// bugfix by php DOM/XML creation.
strTmp = strTmp.Replace("<DataBase/>", "<DataBase>");
strTmp= strTmp.Insert(strTmp.Length, "</DataBase>");
strResponse.Text = strTmp;
// Save the correct xml file to the given location
StreamWriter strWriter = new StreamWriter(@"C:\***\WebRqTest\Test\Db.xml");
strWriter.Write(strTmp);
strWriter.Close();
// create a dataset for the dategridview
DataSet dsBook = new DataSet(strTable.Text);
// usw ......
Hoffe das ich Dir damit etwas weiterhelfen konnte.
MfG
mimo