Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 259

/ вопрос решён /

Здравствуйте, уважаемые эксперты!Доброго времени суток! Не могли бы мне помочь. Пишу программу СУБД «Студент» предназначенную для хранения данных о студенте, внесение новых записей о студенте и редактирование старых записей. Когда создаю новую запись, требуется ввести анкетные данные о студенте, не которые поля не обязательные для заполнения. Если я вношу данные во все поля то в «Лейблах» отображается нормально без ошибок, а если не все поля заполнены то выдает ошибку «Could not convert variant of type (Null) into type (String)». Отображение осуществляется при выборе по фамилии в «ДБГриде». Буду очень признателен за помощь Алексей! Заранее спасибо!

alexlafa Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: alexlafa (статус: Посетитель)
Вопрос отправлен: 5 мая 2011, 21:14
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 6 мая 2011, 13:26; участников в обсуждении: 5.
Егор

Егор (статус: 10-ый класс), 5 мая 2011, 21:18 [#1]:

ошибка в 17-ой строке
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 5 мая 2011, 21:19 [#2]:

каким образом вносим записи?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
alexlafa

alexlafa (статус: Посетитель), 5 мая 2011, 21:29 [#3]:

Запись вноситься через «Едиты», «Чекбоксы», «Спинедиты», «Комбобоксы», «Маскедиты», «ДатаЕдиты», а так же фото студента (но в базе сохраняется только путь к файлу) по нажатию кнопки: все присваиваем соответствующему столбцу в базе MS Access
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 5 мая 2011, 21:54 [#4]:

А каким кодом вставка записи производится?
alexlafa

alexlafa (статус: Посетитель), 5 мая 2011, 21:57 [#5]:

procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
if datamodule3.adotable1.RecordCount=0 then
showmessage('Список студентов пуст! Проверьте подключение к базе данных или добавьте студента.') else
begin
 
slabel43.Caption:=datamodule3.adotable1['Фамилия'];
slabel44.Caption:=datamodule3.adotable1['Имя'];
slabel45.Caption:=datamodule3.adotable1['Отчество'];
slabel46.Caption:=datamodule3.adotable1['Пол'];
slabel52.Caption:=datamodule3.adotable1['Национальность'];
slabel47.Caption:=datamodule3.adotable1['Дата рождения'];
slabel51.Caption:=datamodule3.adotable1['Группа'];
slabel49.Caption:=datamodule3.adotable1['Специальность'];
slabel48.Caption:=datamodule3.adotable1['Учебное заведение'];
slabel57.Caption:=datamodule3.adotable1['Дом/квартира'];
 
slabel50.Caption:=datamodule3.adotable1['Курс'];
slabel56.Caption:=datamodule3.adotable1['Улица'];
 
slabel68.Caption:=datamodule3.adotable1['Дом телефон'];
slabel69.Caption:=datamodule3.adotable1['Моб телефон'];
slabel91.Caption:=datamodule3.adotable1['Ин Область'];
slabel8.Caption:=datamodule3.adotable1['Ин Район'];
slabel92.Caption:=datamodule3.adotable1['Ин Город/село'];
slabel93.Caption:=datamodule3.adotable1['Ин Улица'];
slabel94.Caption:=datamodule3.adotable1['Ин Дом/квартира'];
slabel95.Caption:=datamodule3.adotable1['Ин Телефон'];
 
slabel58.Caption:=datamodule3.ADOtable1['Фамилия отца'];
slabel59.Caption:=datamodule3.ADOtable1['Имя отца'];
slabel60.Caption:=datamodule3.ADOtable1['Отчество отца'];
slabel62.Caption:=datamodule3.ADOtable1['Дата рождения отца'];
slabel70.Caption:=datamodule3.ADOtable1['Место работы отца'];
slabel71.Caption:=datamodule3.ADOtable1['Раб тел отца'];
 
slabel106.Caption:=datamodule3.ADOtable1['Фамилия опекуна'];
slabel107.Caption:=datamodule3.ADOtable1['Имя опекуна'];
slabel108.Caption:=datamodule3.ADOtable1['Отчество опекуна'];
slabel109.Caption:=datamodule3.ADOtable1['Дата рождения опекуна'];
slabel114.Caption:=datamodule3.ADOtable1['Место работы опекуна'];
slabel115.Caption:=datamodule3.ADOtable1['Раб тел опекуна'];
 
  slabel63.Caption:=datamodule3.ADOtable1['Фамилия матери'];
slabel64.Caption:=datamodule3.ADOtable1['Имя матери'];
slabel65.Caption:=datamodule3.ADOtable1['Отчество матери'];
slabel67.Caption:=datamodule3.ADOtable1['Дата рождения матери'];
slabel72.Caption:=datamodule3.ADOtable1['Место работы матери'];
slabel73.Caption:=datamodule3.ADOtable1['Раб тел матери'];
slabel75.Caption:=datamodule3.ADOtable1['Состав семьи кол'];
slabel74.Caption:=datamodule3.ADOtable1['Статус семьи'];
slabel76.Caption:=datamodule3.ADOtable1['Дети до 16'];
slabel78.Caption:=datamodule3.ADOtable1['Материальное положения'];
slabel77.Caption:=datamodule3.ADOtable1['Дети-инвалиды'];
slabel79.Caption:=datamodule3.ADOtable1['Сироты'];
slabel80.Caption:=datamodule3.ADOtable1['Окончание основной или средней школы, наименование организации'];
slabel81.Caption:=datamodule3.ADOtable1['Год окончания школы'];
slabel81.Caption:=datamodule3.ADOtable1['Номер приказа выб']+ datamodule3.ADOtable1['Дата приказа выб']+
datamodule3.ADOtable1['Куда выб'];
 
 
image1.Picture.LoadFromFile(extractfilepath(application.ExeName)+datamodule3.ADOTable1['Фото']);
 
slabel49.Hint:=slabel49.Caption;
 
end;
end;
alexlafa

alexlafa (статус: Посетитель), 5 мая 2011, 21:58 [#6]:

Сорри это отображения)
alexlafa

alexlafa (статус: Посетитель), 5 мая 2011, 21:59 [#7]:

procedure TForm4.sBitBtn2Click(Sender: TObject);
begin
datamodule3.ADOTable1.Insert;
datamodule3.ADOTable1['Фамилия']:=sedit1.text;
datamodule3.ADOTable1['Имя']:=sedit2.text;
datamodule3.ADOTable1['Отчество']:=sedit3.text;
 datamodule3.ADOTable1['Пол']:=sComboBox1.text;
datamodule3.ADOTable1['Национальность']:=sedit4.text;
datamodule3.ADOTable1['Дата рождения']:= datetostr(sdateedit1.Date);
datamodule3.ADOTable1['Учебное заведение']:=sComboBox4.text;
datamodule3.ADOTable1['Специальность']:=sComboBox5.text;
datamodule3.ADOTable1['Курс']:=sComboBox2.text;
datamodule3.ADOTable1['Группа']:=sComboBox3.text;
datamodule3.ADOTable1['Улица']:=sedit25.text;
datamodule3.ADOTable1['Дом/квартира']:=sedit24.text;
datamodule3.ADOTable1['Дом телефон']:=smaskedit6.Text;
datamodule3.ADOTable1['Моб телефон']:=smaskedit7.Text;
datamodule3.ADOTable1['Ин Область']:=sComboBox6.text;
datamodule3.ADOTable1['Ин Район']:=sedit7.text;
datamodule3.ADOTable1['Ин Город/Село']:=sedit8.text;
datamodule3.ADOTable1['Ин Улица']:=sedit6.text;
datamodule3.ADOTable1['Ин Дом/квартира']:=sedit5.text;
datamodule3.ADOTable1['Ин Телефон']:=smaskedit1.Text;
datamodule3.ADOTable1['Окончание основной или средней школы, наименование организации']:=sedit21.text;
datamodule3.ADOTable1['Год окончания школы']:= datetostr(sdateedit5.Date);
datamodule3.ADOTable1['Номер приказа выб']:=sedit22.text;
datamodule3.ADOTable1['Дата приказа выб']:= datetostr(sdateedit6.Date);
datamodule3.ADOTable1['Куда выб']:=sedit23.text;
datamodule3.ADOTable1['Материальное положения']:=sComboBox7.text;
//
datamodule3.ADOTable1['Фамилия отца']:=sedit13.text;
datamodule3.ADOTable1['Имя отца']:=sedit14.text;
datamodule3.ADOTable1['Отчество отца']:=sedit15.text;
datamodule3.ADOTable1['Дата рождения отца']:= datetostr(sdateedit3.Date);
datamodule3.ADOTable1['Место работы отца']:=sedit16.text;
datamodule3.ADOTable1['Раб тел отца']:=smaskedit4.Text;
//
datamodule3.ADOTable1['Фамилия матери']:=sedit9.text;
datamodule3.ADOTable1['Имя матери']:=sedit10.text;
datamodule3.ADOTable1['Отчество матери']:=sedit11.text;
datamodule3.ADOTable1['Дата рождения матери']:= datetostr(sdateedit2.Date);
datamodule3.ADOTable1['Место работы матери']:=sedit12.text;
datamodule3.ADOTable1['Раб тел матери']:=smaskedit3.Text;
//
datamodule3.ADOTable1['Фамилия опекуна']:=sedit17.text;
datamodule3.ADOTable1['Имя опекуна']:=sedit18.text;
datamodule3.ADOTable1['Отчество опекуна']:=sedit19.text;
datamodule3.ADOTable1['Дата рождения опекуна']:= datetostr(sdateedit4.Date);
datamodule3.ADOTable1['Место работы опекуна']:=sedit20.text;
datamodule3.ADOTable1['Раб тел опекуна']:=smaskedit5.Text;
//
if sCheckBox6.Checked=true then
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ 'неполная'
else
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ 'полная';
if sCheckBox5.Checked=true then
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ ', малообеспеченная'
else
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ '';
if sCheckBox8.Checked=true then
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ ', многодетная'
else
datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ '';
 
//----------------------------------------------------
datamodule3.ADOTable1['Состав семьи кол']:=sspinedit1.Text;
datamodule3.ADOTable1['Состав семьи кол']:=sspinedit1.Text;
//----------------------------------------------------
if sspinedit3.Text='0' then
 datamodule3.ADOTable1['Дети до 16']:='Нет'
 else
 datamodule3.ADOTable1['Дети до 16']:=sspinedit3.Text;
 
 if sspinedit2.Text='0' then
 datamodule3.ADOTable1['Дети-инвалиды']:=''
 else
 datamodule3.ADOTable1['Дети-инвалиды']:=sspinedit2.Text;
 
 if scheckbox3.Checked=true then
 datamodule3.ADOTable1['Сироты']:='ОБПР' else
 datamodule3.ADOTable1['Сироты']:='';
 //----------- ФОТО -----------------
if sopenpicturedialog1.FileName <>'' then begin
image1.Picture.SaveToFile(extractfilepath(application.ExeName)+'Фото\'+(datamodule3.ADOtable1['Фамилия']+'
'+datamodule3.ADOtable1['Имя']+' '+datamodule3.ADOtable1['Отчество'])+'.jpg');
datamodule3.ADOtable1['Фото']:= ('Фото\'+datamodule3.ADOtable1['Фамилия']+' '+datamodule3.ADOtable1['Имя']+'
'+datamodule3.ADOtable1['Отчество']+'.jpg');
end else
datamodule3.ADOtable1['Фото']:= 'Фото\Нет Фото.jpg';
//----------- ФОТО -----------------
 
 
 
 
 
 
 
 
 
 
datamodule3.ADOtable1.Post;
datamodule3.ADOTable1.Active:= true;
Form4.Close;
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 5 мая 2011, 22:37 [#8]:

Попробуйте в явном виде вставлять пустую строку. Типа так:
if sedit13.text > '' then
datamodule3.ADOTable1['Фамилия отца']:=sedit13.text
else
datamodule3.ADOTable1['Фамилия отца']:= '';
Егор

Егор (статус: 10-ый класс), 6 мая 2011, 04:10 [#9]:

блин. а зачем так мучиться? есть же готовые компоненты, которые сами всё делают - dbEdit, dbCheckbox, dbCombobox и т.д. используя их, вообще бы ВЕСЬ этот код не нужен в принципе.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
corban

corban (статус: 2-ой класс), 6 мая 2011, 04:15 [#10]:

лучше вот так наверное:
datamodule3.ADOTable1.FieldByName('Фамилия отца').AsString:=sedit13.text;
Егор

Егор (статус: 10-ый класс), 6 мая 2011, 04:44 [#11]:

Цитата (Шичко Игорь):

Попробуйте в явном виде вставлять пустую строку

зачем? он же пишет - ошибка. проще вообще не вставлять ничего
if sedit1.text <> '' then
  datamodule3.ADOTable1['Фамилия'] := sedit1.text;
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 6 мая 2011, 04:57 [#12]:

а если бы ещё ты строку писал, на которой ошибка выскакивает - было бы вообще замечательно. потому что ошибка идёт не когда идёт ЗАПИСЬ,а когда ты пытаешься ЧИТАТЬ данные из пустой ячейки:

Цитата (alexlafa):

«Could not convert variant of type (Null) into type (String)»
невозможно преобразовать вариантный тип (Null) в тип (Striong)


if sCheckBox6.Checked=true then
  datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ 'неполная'
  // вот тут ошибка? пытаемся взять значение из только что созданной записи, в которой, конечно же
  // хранится Null, т.е. ничего
...
  datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ ', малообеспеченная'
  // а если в ['Статус семьи'] ничего не было, то получим там строку с запятой
  // впереди: ", малообеспеченная"
  // или так и надо?
...
  datamodule3.ADOtable1['Статус семьи']:=datamodule3.ADOtable1['Статус семьи']+ ''
  // или скорее тут ошибка? пытаемся к Null прибавить пустую строку?
  // вообще, странная конструкция - зачем читать строку, прибавлять к ней ничего и записывать обратно?!
остальное не смотрел
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 6 мая 2011, 05:42 [#13]:

Цитата (Егор):

зачем? он же пишет - ошибка. проще вообще не вставлять ничего

чтобы не осталось данных от предыдущей просмотренной записи
alexlafa

alexlafa (статус: Посетитель), 6 мая 2011, 13:26 [#14]:

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

if datamodule3.ADOTable1['Фамилия']='' then
slabel43.caption:='---'
else
slabel43.Caption:=datamodule3.adotable1['Фамилия'];
\\проблему решил так, одна из строк для отображения записи.

6 мая 2011, 13:31: Статус вопроса изменён на решённый (изменил автор вопроса — alexlafa)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.05 сек.