(Часть 1) (*Закрыта*)Я начинающий, подскажите пожалуйста, как...
Если вы только начинаете осваивать среду разработки ВСВ - предлагаю возникающие вопросы размещать в данной теме. Не создавайте пожалуста отдельные темы - типа "Как мне запустить свое приложение на другом компьютере", "Как перевести String в char*" и тому подобное. Такие темы будут закрываться с отсылку в эту. Не обижайтесь.
Кроме того, не брезгуйте плиз, пользоваться поиском хотя бы, по нескольким критериям. Иногда бывает так, вопрос который возник у вас не столь оригинален - вполне возможно, кто то уже спрашивал его до вас :) Поверьте, отвечать на одни и теже вопросы тоже не всегда интересно.
Если вы задаете свой вопрос на форуме - что бы получить наиболее эффективный ответ - следуйте пожалуйста несложным правилам. Они просты:
0. Опишите чего вы хотели добиться.
1. Опишите ошибку которая у вас возникла, по возможности с текстом самой ошибки.
2. Если вы считаете это необходимым - приведите фрагмент(пожалуста не помещайте в свой вопрос весь листинг) кода, на который жалуется компилятор, коротко описав переменные которые используются, и как они инициализируются. Исходники высылайте или выкладывайте только в том случае, если вас об этом просят.
3. Если проблема связана с функцией какой либо библиотеки - не стесняйтесь залезть в хелп и найти там ее описание. То чтовы не рубите в английском, зато читаете Рабле в оригинале - отнюдь не оправдание. Людей для которых английский - родной, здесь немного. Пользуйтесь словарем, это дает результаты :)
4. Не забывайте - может быть ВСВ и имеет раширения по сравнению со стандартом - но тем не менее это С++. Не забывайте проверить, что в ваш проект подключены все необходимые заголовочные файлы, а так же файлы библиотек.
5. Если вы задали вопрос один раз - не нужно его повторять или дублировать, или размещать посты типа "Ну что никто не знает" и т.д. Вы рискуете узнать много разных путей, но так и не получить нужный вам ответ.
6. Форум - дело сугубо добровольное. Здесь ни кто НЕ ОБЯЗАН искать ответы на ваши вопросы. Если вам отвечают - то это только исключительно из любви к вам. :)
7. Исходя из выше сказанного, если вам не отвечают - ну возможно вас не любят :)
8. Для тех, кому нужно написать курсовую, программу, решить контрольную или тому подобное - существует раздел форума Студентам
Размещайте, плиз, свои посты там. Сообщения размещенные в данной теме - не будут перемещаться - они будут удаляться.
9. Если вы хотите пообщаться, обсудить тему, не связанную с ВСВ - милости просим: В "Отдохнем". Флуд в данном разделе не приветствуется.
Ну вроде все. Если что забыл - или не так - поправьте.
Удачи.
Задам несомненно дурацкий вопрос, который наверняка задавали, но по поиску подходящего не удалось найти.
Пытаюсь числовые поля из StringGrid перевести в числа, выполнить с ними математические операции и запихать в другой StringGrid.
Использую функции StrToFloat и FloatToStr, но в новой таблице появляются целые числа, а не реальные (остальное отбрасывается).
Подскажите, пожалуйста, в чём проблема или дайте ссылочку на похожий пост.
Задам несомненно дурацкий вопрос, который наверняка задавали, но по поиску подходящего не удалось найти.
Пытаюсь числовые поля из StringGrid перевести в числа, выполнить с ними математические операции и запихать в другой StringGrid.
Использую функции StrToFloat и FloatToStr, но в новой таблице появляются целые числа, а не реальные (остальное отбрасывается).
Подскажите, пожалуйста, в чём проблема или дайте ссылочку на похожий пост.
Для начала проверьте свою математическую операцию - скорей всего обрезание десятичной части происходит там - при присваивании дробного числа целому. Проверьте код на наличие подобных конструкций:
... 2*a;
правильно:
... 2.0*a;
Данные получаются по рекомендованной цепочке:
ХП-DataSetProvider-ClientDataSet-контролы
Но теперь ничего не могу добавлять и модифицировать в главной таблице с 50 полями.
Работу с вспомогательными таблицами я уже перестроил на ХП.
Но вот с модификацией и добавлением данных в главную таблицу через контролы ничего не работает :(
Какова должна быть правильная последовательность действий?
Я делаю примерно так:
DataModule2->ClientMain->ApplyUpdates(-1);
DataModule2->ClientMain->Refresh();
после внесения изменений.
В результате:
Unable to resorv records. Table name not found.
Как нужно правильно вносить изменения в БД и новые записи при такой архитектуре.
Прошу прощения замотался и забыл ответить. Для модификации данных при этой архитектуре необходимо использовать события OnDefore*, OnAfter*, OnBeforeApplyUpdates && OnAfterApplyUpdates.
Но обычно я поступаю следующим образом - до тех пор пока интерфейс пользователя не отработан и не вылизан - в обработчиках событий происходит просто вызов соотвествующих процедур. Когда модель взаимодействия отлажена полностью - все вызова переключаются на провайдера. Это связанно с тем, что как правило прямой вызов проще - а когда модель передачи данных еще не устаканена до конца, организация вызовов через провайдера может занять больше времени. Но Это ИМХО и вовсе не обязательно использовать мою модель разработки для себя - я отработал ее для себя с учетом своих предпочтений - но как показал опыт ее промышленного применения - весьма эффективно.
проблема - есть несколько форм, в одной форме(Form3) нужно вызвать функцию, которая описана в cpp-модуле другой формы(Form2), и выполняет действия с объектами Form2.
я прописываю в заголовке Form2:
void __fastcall Save (TStringGrid *StringGrid1, TCheckBox *CheckBox1, TEdit *Edit2, TEdit *Edit3);
и вызываю её в Form3:
но при выполнении программы возникает ошибка
подскажите, пожалуйста, что не так. ещё раз извините за наглость.
проблема - есть несколько форм, в одной форме(Form3) нужно вызвать функцию, которая описана в cpp-модуле другой формы(Form2), и выполняет действия с объектами Form2.
я прописываю в заголовке Form2:
void __fastcall Save (TStringGrid *StringGrid1, TCheckBox *CheckBox1, TEdit *Edit2, TEdit *Edit3);
и вызываю её в Form3:
но при выполнении программы возникает ошибка
подскажите, пожалуйста, что не так. ещё раз извините за наглость.
Установите точку останова и проверьте где конкретно у вас вылетает исключение. Возможно в данный момент форма не создана, или уже разрушена.
тут и без точки останова ясно - Form2 создается до Form3 и остается активным после закрытия Form3.
тут и без точки останова ясно - Form2 создается до Form3 и остается активным после закрытия Form3.
Если вам все ясно - то какого ... вы вопросы задаете? Я помоему русским языком сказал - установите точку останова и определите, обращение к какому объекту генерирует исключение.
Варианты с TEditDB не предлагать - не то. Помимо SQL еще есть приемлимые варианты?
Прощу прощения, если этот вопрос уже раасматривался, в поиске не нашел.
Варианты с TEditDB не предлагать - не то. Помимо SQL еще есть приемлимые варианты?
Прощу прощения, если этот вопрос уже раасматривался, в поиске не нашел.
Table1->Append();
Table1->Edit();
Table1->FieldByName("FieldName")->AsString = Edit1->Text;
Table1->Post();
ЗЫ: но лучше все таки SQL-ем
Варианты с TEditDB не предлагать - не то. Помимо SQL еще есть приемлимые варианты?
Прощу прощения, если этот вопрос уже раасматривался, в поиске не нашел.
Помимо SQL, скорее всего, нету..т.к. все таки работа с базой осуществляется через sql, ну или через ХП.
Table1->Edit();
Table1->FieldByName("FieldName")->AsString = Edit1->Text;
Table1->Post();
ЗЫ: но лучше все таки SQL-ем
Table1->Edit() - зачем?
чтоб не рисковать (бывало такое: "Dataset not in edit or insert mode")
даже правильней вот так:
if (Table1->State != dsEdit) Table1->Edit();
oxotnik333 прав. При работе с компонентами прямого доступа обязательно надо проверять текущий режим компонента - иначе проблем не избежать. Другой вопрос - стоит ли использовать для этих целей TTable - но это подробно обсуждалось уже, думаю смысла повторяться нет. В конце концов - как любят говорить, кто как хочет - так и дрочит :)
2Sholah_Weras
А если не секрет - чем конкретно не подходит TDBEdit, если, я так понимаю, в работе с SQL не очень то сильны - врядли это проблема с производительностью и сетевой трафик - тем более TTable это ли лучший выбор. :)
Допустим переменная "а" хранит имя компонента Image, Как можно сделать что-то вроде: a->Visible=false;
Извеняюсь, если я написал бред, (Я не очень силён в программировании) но мне нужно как то обратится к одному из компонентов Image и я зарание не знаю к какому именно.
Буду очень благодарен если кто-то мне поможет.
Допустим переменная "а" хранит имя компонента Image, Как можно сделать что-то вроде: a->Visible=false;
Извеняюсь, если я написал бред, (Я не очень силён в программировании) но мне нужно как то обратится к одному из компонентов Image и я зарание не знаю к какому именно.
Буду очень благодарен если кто-то мне поможет.
Прежде чем задать вопрос - нужно использовать поиск - рассматривалось уже неоднократно, как в программе обратиться к компоненту на форме.
a->Visible = true;
Мне нужно сделать так, что бы при нажатии на картинку, какая-то информация о ней отправлялась... допустим в эдит, а потом из любого места программы можно было-бы обратится к эдиту и узнать какая именно из картинок была открыта...
Если Вам не трудно обьясните пожалуйста как такое сделать.
Мне нужно сделать так, что бы при нажатии на картинку, какая-то информация о ней отправлялась... допустим в эдит, а потом из любого места программы можно было-бы обратится к эдиту и узнать какая именно из картинок была открыта...
Если Вам не трудно обьясните пожалуйста как такое сделать.
Если нужно имя компонента, то:
а если нужно имя файла, который загружается в Image1:
Image1->LoadFromFile(OpenDialog1->FileName);
Edit1->Text = OpenDialog1->FileName;