Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

BCB, wchar_t, STL

6 views
Skip to first unread message

Julius Korotkov

unread,
May 13, 2011, 3:00:20 AM5/13/11
to
Приветствую, All!

Много лет пользовался 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

Julius Korotkov

unread,
May 16, 2011, 2:21:34 PM5/16/11
to
AREA:su.c_cpp
Приветствую, All!

==== Начало _SQL_Framework.cpp ====

va_list ap;
va_start(ap, tableName);

va_end(ap);

IBSQL1->Transaction = IBTransaction;
}

==== Конец _SQL_Framework.cpp ====

лучше особых идей нет. Читаю про списки в STL.

Julius

Vladimir Bakhvaloff

unread,
May 16, 2011, 2:58:01 PM5/16/11
to
> [HTTP://bakh.spb.ru] [EMail: bob#bakh.spb.ru] [ICQ:1608235]
Удачной охоты, Julius! (Кстати, а как пpошла пpедыдущая?)

Отвечая на письмо 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 *

Julius Korotkov

unread,
May 17, 2011, 7:08:22 AM5/17/11
to
Приветствую, Vladimir!

16 May 11 в 23:58, Vladimir Bakhvaloff -> Julius Korotkov:

JK>> Много лет пользовался BCB 6, где написал для себя такой класс:

VB> Твой пост трёхдневной давности был виден...
sorry, были проблемы c uplink'ом, думал не прошло.

VB> Но мысль, как видишь, отстутствует не только у меня... :(
Странно. Мне кажется, такие задачи возникают в любом более-менее сложном
приложении.
3 дня назад я сделал тупо - написанием конкретного запроса, изматерился, потому
что неудобно очень.
Наверное, поправлю свой класс для использования AnsiString вместо char *.

Julius

alexander koryagin

unread,
May 18, 2011, 12:40:58 AM5/18/11
to
Привет, Julius Korotkov! Как там Москва поживает?
Во вторник семнадцатого мая, ты писал к Vladimir Bakhvaloff насчет
"BCB, wchar_t, STL"

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

0 new messages