Много лет пользовался BCB 6, где написал для себя такой класс:
==== Начало _SQL_Framework.cpp ====
void SQL_Framework::sqlInsert(TIBTransaction *IBTransaction_, char *tableName
...)
{
IBSQL1->Transaction = IBTransaction_;
AnsiString fields, values;
char *p;
va_list ap;
va_start(ap, tableName);
#pragma warn -pia
for (; p = va_arg(ap, char *); p != NULL)
#pragma warn .pia
{
fields += AnsiString(p) + ",";
p = va_arg(ap, char *);
if (strlen(p) == 0)
values += "NULL,";
else if (strstr(p,"GEN_ID(") == NULL)
values += "'" + AnsiString(p) + "',";
else
values += AnsiString(p) + ",";
}
va_end(ap);
fields[fields.Length()] = ')'; // Заменяем последнюю запятую на скобку
values[values.Length()] = ')';
IBSQL1->SQL->Text = "INSERT INTO " + AnsiString(tableName) + "(" + fields + "
IBSQL1->SQL->VALUES(" + values + ";";
IBSQL1->ExecQuery();
IBSQL1->Close();
IBSQL1->Transaction = IBTransaction;
}
==== Конец _SQL_Framework.cpp ====
И вот так им пользовался:
fMain->SQL_Fwk->sqlInsert(fMain->IBTransaction1, "Ngp_log",
"id", "GEN_ID(gen_ngp_log,1)",
"who_changed", fMain->User.c_str(),
"ngp_id",
IBDataSet1->FieldByName("id")->AsString.c_str(),
"number",
IBDataSet1->FieldByName("number")->AsString.c_str(),
"address",
IBDataSet1->FieldByName("address")->AsString.c_str(),
"type1",
IBDataSet1->FieldByName("type3")->AsString.c_str(),
"type2",
IBDataSet1->FieldByName("type2")->AsString.c_str(),
"type3",
IBDataSet1->FieldByName("type3")->AsString.c_str(),
"type1_near",
IBDataSet1->FieldByName("type1_near")->AsString.c_str(),
"capacity",
IBDataSet1->FieldByName("capacity")->AsString.c_str(),
"customer",
IBDataSet1->FieldByName("customer")->AsString.c_str(),
"builder",
IBDataSet1->FieldByName("builder")->AsString.c_str(),
"comment",
IBDataSet1->FieldByName("comment")->AsString.c_str(),
"status",
IBDataSet1->FieldByName("status")->AsString.c_str(),
NULL);
После перехода на RAD Studio XE, в БД попадает мусор.
Долго думал ;-), понял, что из-за перехода BCB на unicode.
Тупо поменять в функции char на wchar_t почему-то не помогло.
Подскажите, плиз, есть ли простой способ починить мою функцию? Если нет, хочу
написать что-то новое такого же функционала, но как сделать это по-другому и
лучше особых идей нет.
Julius
==== Начало _SQL_Framework.cpp ====
va_list ap;
va_start(ap, tableName);
va_end(ap);
IBSQL1->Transaction = IBTransaction;
}
==== Конец _SQL_Framework.cpp ====
лучше особых идей нет. Читаю про списки в STL.
Julius
Отвечая на письмо Julius Korotkov => All [Пн 16 Май 11]:
JK> Много лет пользовался BCB 6, где написал для себя такой класс:
JK> SEEN-BY: 46/50 50/13 450/210 463/68 4615/21 5000/111 5001/100 5005/49
JK> SEEN-BY: 5010/352 5015/42 5020/785 830 1042 1436 4441 5030/87 115 172
JK> 251
JK> SEEN-BY: 5030/262 266 382 448 518 535 580 754 786 845 851 888 918 920
JK> 930
JK> SEEN-BY: 5030/1115 1521 5038/9 5051/41 5052/4 5053/7 5054/89 5064/56
JK> SEEN-BY: 5080/102 5083/444 5098/11 5100/113 6070/109 6090/1
Твой пост трёхдневной давности был виден...
Но мысль, как видишь, отстутствует не только у меня... :(
Hasta la vista, Julius!..
> [ 3D Professional Team | Argus Team ]
* Windows XP Professional [version 5.1.2600] Service Pack 3 *
16 May 11 в 23:58, Vladimir Bakhvaloff -> Julius Korotkov:
JK>> Много лет пользовался BCB 6, где написал для себя такой класс:
VB> Твой пост трёхдневной давности был виден...
sorry, были проблемы c uplink'ом, думал не прошло.
VB> Но мысль, как видишь, отстутствует не только у меня... :(
Странно. Мне кажется, такие задачи возникают в любом более-менее сложном
приложении.
3 дня назад я сделал тупо - написанием конкретного запроса, изматерился, потому
что неудобно очень.
Наверное, поправлю свой класс для использования AnsiString вместо char *.
Julius
JK>>> Много лет пользовался BCB 6, где написал для себя такой класс:
VB>> Твой пост трёхдневной давности был виден...
JK> sorry, были проблемы c uplink'ом, думал не прошло.
VB>> Hо мысль, как видишь, отстутствует не только у меня... :(
JK> Странно. Мне кажется, такие задачи возникают в любом более-менее
JK> сложном приложении.
JK> 3 дня назад я сделал тупо - написанием конкретного запроса,
JK> изматерился, потому что неудобно очень.
JK> Hаверное, поправлю свой класс для использования AnsiString вместо char
JK> *.
Угу, эксперимент и упрощение это главное оружие в таких случаях.
[...Внимание, внимание! Говорит и показывает Жириновский!]
Bye Julius!
Alexander
fido7.ru.cbuilder 2011