C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Получить значение поля, Вопрос чайника
xrenok
Отправлено: 26.02.2004, 17:59


Ученик-кочегар

Группа: Участник
Сообщений: 19



Использую цепочку ADOConnection1, ADODataSet1, DataSource1, DBGridEh1.

Требуется программно удалять и редактировать записи в гриде (посредством вызова popupmenu).

Пока просто пытаюсь вывести окно с предупреждением:
Application->MessageBox(ADODataSet3->FieldByName("Title")->Text->AsString, "Удаление записи", MB_OKCANCEL);

Ничего не выходит. Как надо делать?
xTrim
Отправлено: 26.02.2004, 18:22


Машинист паровоза

Группа: Участник
Сообщений: 208



CODE

Application->MessageBox(ADODataSet3->FieldByName("Title")->AsString, "Удаление записи", MB_OKCANCEL)

может так?
olegenty
Отправлено: 26.02.2004, 18:42


Ветеран

Группа: Модератор
Сообщений: 2412



а на самом деле вот так:
CODE
Application->MessageBox([B]ADODataSet3->FieldByName("Title")->AsString.c_str()[/B], "Удаление записи", MB_OKCANCEL)

ибо объявлена функция вот так:
CODE
int __fastcall MessageBox(const char * Text, const char * Caption, int Flags);
xrenok
Отправлено: 26.02.2004, 18:44


Ученик-кочегар

Группа: Участник
Сообщений: 19



Так работает:

ShowMessage(ADODataSet3Title->AsString);

А так нет:

Application->MessageBox(ADODataSet3Title->AsString, "Óäàëåíèå çàïèñè", MB_OKCANCEL);
olegenty
Отправлено: 26.02.2004, 19:00


Ветеран

Группа: Модератор
Сообщений: 2412



надо к char* преобразовывать:

Application->MessageBox(ADODataSet3Title->AsString.c_str(), "Удалить запись", MB_OKCANCEL);
xrenok
Отправлено: 28.02.2004, 23:57


Ученик-кочегар

Группа: Участник
Сообщений: 19



Подскажите как написать данную функцию без использования strcat. Для меня тип AnsiString совершенно не знаком.

void __fastcall TForm1::FilmDeleteExecute(TObject *Sender)
{
char tmp[258]="\"";
int msg;
strcat(strcat(tmp,ADODataSet1->FieldByName("Title")->AsString.c_str()),"\"");
msg = Application->MessageBox(tmp, "Удаление записи", MB_OKCANCEL);
if(msg==IDOK){ADODataSet1->Delete();}
}
olegenty
Отправлено: 03.03.2004, 09:18


Ветеран

Группа: Модератор
Сообщений: 2412



мне бы твои проблемы:
CODE

void __fastcall TForm1::FilmDeleteExecute(TObject *Sender)
{
   AnsiString asMessage = "\"" + ADODataSet1->FieldByName("Title")->AsString + "\"";
                                         
   int msg;
   msg = Application->MessageBox(asMessage.c_str(), "Удаление записи", MB_OKCANCEL);
   if(msg==IDOK)
   {
       ADODataSet1->Delete();
   }
}


с другого языка переходишь, чтоли? Страуструпа двухтомник второе издание найди и почитай. (в смысле — рекомендую, потому что вопросы ну совсем чайные)
xrenok
Отправлено: 03.03.2004, 17:56


Ученик-кочегар

Группа: Участник
Сообщений: 19



Да, с другого. С чистого Си.
О типе AnsiString уже почитал. Спасибо.
olegenty
Отправлено: 04.03.2004, 09:14


Ветеран

Группа: Модератор
Сообщений: 2412



Огромное множество вещей висит на перегруженных (и, зачастую, имеющих классовое определение) операторах. Оч. удобно.

Я с паскаля переходил. Но давно.

Вернуться в Работа с базами данных в C++Builder