查询中的多个字段在 C++ Builder 6 中不起作用
Multiple fields in query don't work in C++ Builder 6
我正在使用 C++ Builder 6,我想在我的 MySQL 的 table 查询中查询多个 field/column ] 数据库。
比方说,我有一个名为 "users" 的 table,我的 table 有字段 "id"、"name"、"username" 和"password"。请检查以下示例:
query = "SELECT name FROM users;"; // WORKS
query = "SELECT name, username FROM users;"; // WORKS ONLY FOR THE 1ST FIELD "name"
query = "SELECT * FROM users;"; // DOESN'T WORK: GIVES ME EAccessViolation
query = "SELECT name FROM users UNION SELECT username FROM users;"; // WORKS BUT IT ISN'T A SOLUTION
到目前为止,我的其余代码几乎与我在此 guide 中找到的相同。
我可以同时查询1个以上的字段吗?
完整代码:
String query;
outputMemo->ClearSelection();
// PROBLEMATIC QUERY !!!
query = "SELECT * FROM users;";
try {
SQLQuery1->SQL->Text = query;
SQLQuery1->Active = true;
}
catch (Exception& E) {
outputMemo->Text = "Exception raised with message" + E.Message;
}
// Show the results of the query in a TMemo control.
TStringList *list;
TField *currentField;
String currentLine;
if (!SQLQuery1->IsEmpty()) {
SQLQuery1->First();
list = new TStringList;
__try {
SQLQuery1->GetFieldNames(list);
while (!SQLQuery1->Eof) {
currentLine = "";
for (int i=0; i<list->Count; i++) {
currentField = SQLQuery1->FieldByName(list->Strings[i]);
currentLine = currentLine + " " + currentField->AsString;
}
outputMemo->Lines->Add( currentLine.c_str() );
SQLQuery1->Next();
}
}
catch (Exception& E) {
outputMemo->Text = "Exception raised with message" + E.Message;
}
list->Free();
}
提前感谢您的帮助和抽出时间。
指导您 link 使用 SQLite 而不是您代码中的 MySQL。
我建议每个 DBMS 的文件不同。
虽然 MySQL 可以直接使用它自己的驱动程序,使用 MySQL 的 api,使用 ODBC 和 MySQL 可能允许使用组件。
我发现问题出在 MySQL 的错误 dbExpress 驱动程序。 Dll dbxopenmysql50.dll 可能只适用于 MySQL v5.0。 MySQL 的 DevArt dbExpress 驱动程序可用于比 MySQL.
的 v5.0 更高的版本
我正在使用 C++ Builder 6,我想在我的 MySQL 的 table 查询中查询多个 field/column ] 数据库。
比方说,我有一个名为 "users" 的 table,我的 table 有字段 "id"、"name"、"username" 和"password"。请检查以下示例:
query = "SELECT name FROM users;"; // WORKS
query = "SELECT name, username FROM users;"; // WORKS ONLY FOR THE 1ST FIELD "name"
query = "SELECT * FROM users;"; // DOESN'T WORK: GIVES ME EAccessViolation
query = "SELECT name FROM users UNION SELECT username FROM users;"; // WORKS BUT IT ISN'T A SOLUTION
到目前为止,我的其余代码几乎与我在此 guide 中找到的相同。
我可以同时查询1个以上的字段吗?
完整代码:
String query;
outputMemo->ClearSelection();
// PROBLEMATIC QUERY !!!
query = "SELECT * FROM users;";
try {
SQLQuery1->SQL->Text = query;
SQLQuery1->Active = true;
}
catch (Exception& E) {
outputMemo->Text = "Exception raised with message" + E.Message;
}
// Show the results of the query in a TMemo control.
TStringList *list;
TField *currentField;
String currentLine;
if (!SQLQuery1->IsEmpty()) {
SQLQuery1->First();
list = new TStringList;
__try {
SQLQuery1->GetFieldNames(list);
while (!SQLQuery1->Eof) {
currentLine = "";
for (int i=0; i<list->Count; i++) {
currentField = SQLQuery1->FieldByName(list->Strings[i]);
currentLine = currentLine + " " + currentField->AsString;
}
outputMemo->Lines->Add( currentLine.c_str() );
SQLQuery1->Next();
}
}
catch (Exception& E) {
outputMemo->Text = "Exception raised with message" + E.Message;
}
list->Free();
}
提前感谢您的帮助和抽出时间。
指导您 link 使用 SQLite 而不是您代码中的 MySQL。
我建议每个 DBMS 的文件不同。
虽然 MySQL 可以直接使用它自己的驱动程序,使用 MySQL 的 api,使用 ODBC 和 MySQL 可能允许使用组件。
我发现问题出在 MySQL 的错误 dbExpress 驱动程序。 Dll dbxopenmysql50.dll 可能只适用于 MySQL v5.0。 MySQL 的 DevArt dbExpress 驱动程序可用于比 MySQL.
的 v5.0 更高的版本