Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Глюк базы dBase если поле пустое   Найти похожие ветки 

 
leonidus ©   (2005-05-12 10:16) [0]

Мастера подскажите как победить такую проблему. В процессе применения фильтра (Table.Filtered:=true) в обработчике
procedure TForm1.TTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean); для последующего составления отчета нужно в собрать данные из нужных полей и занести в архив (а потом в отчет). Делаю так:

st:="";

IF (dataset["Econom1"]<>"") and (dataset["Econom1"]<>" ") and (dataset["Econom1"]<>null) and (dataset["Data_prikaz1"]<>"") and (dataset["Data_prikaz1"]<>" ") and (dataset["Data_prikaz1"]<>null) THEN
st:=st+"  "+dataset["Econom1"]+"-"+dataset["Data_prikaz1"];

Проблема в том, что если поле пустое, то получаю exception EVariantError "Invalid variant type conversion", если закрыть проверку блоком try - except то чтение всех последующих записей так же читается с ошибкой (но конечно "тихо" т.к. try - except тушит все ошибки) и в результате даже если потом пойдут не пустые поля прочесть их содержимое уже не удается:

 try
  if (dataset["Econom1"]<>"") and (dataset["Econom1"]<>" ") and (dataset["Econom1"]<>null) and
     (dataset["Data_prikaz1"]<>"") and (dataset["Data_prikaz1"]<>" ") and (dataset["Data_prikaz1"]<>null) then
   st:=st+"  "+dataset["Econom1"]+"-"+dataset["Data_prikaz1"];
 except
  memo1.Lines.Add("Econom1-Data_prikaz1 - ошибка");
 end;

в результате получаю кучу записей  "Econom1-Data_prikaz1 - ошибка".

Собственно вопрос в том, как безболезненно узнать пустое поле или нет, что бы даже не заморачиваться с его чтением и идти к следующей записи.


 
Johnmen ©   (2005-05-12 10:18) [1]

IsNull


 
evvcom ©   (2005-05-12 10:21) [2]

И по ходу: а еще есть функция trim


 
msguns ©   (2005-05-12 10:22) [3]

Корректнее обращаться к полям НД через методы TField As...


 
Anatoly Podgoretsky ©   (2005-05-12 10:28) [4]

Это твой глюк, а не базы. И поострожней с Variant, ты от него еще не раз по зубам получишь.


 
leonidus ©   (2005-05-12 11:21) [5]

Дело в том, что я работаю именно в обратобчике procedure TForm1.TTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean);  т.е. с текущей записью и следовательно для работу й меня есть только dataset["имя поля"] и мне че-то не онятно как тут сделать проверку используя IsNull, Trim тут вроде тоже не в тему, или я чего-то не понимаю?

Обращаться к методам через TField As... это да, но как мне быть в данном конкетном случае?

Т.е. я запускаю фильтрацию базы, проверяю соответствует ли данная запись моим кртериям и если все ок, то читаю данные из ее полей Econom1 Data_prikaz1 и если поля не пустые то помещаю их в массив. Так как же мне тут не напоросься на исключчительную ситуацию?


 
Anatoly Podgoretsky ©   (2005-05-12 11:27) [6]

TDataset + F1 легко докажетс, что у тебя есть не только это, а много больше.
И весьма интересное использование фильтрации для заполнения массива :-)


 
msguns ©   (2005-05-12 11:34) [7]

Обращение к полю НД с помощью массива [] лишь один из множества методов, причем едва ли не самый неуклюжий.
Возьми на себя труд и почитай справку по TTable,TADOTable или что там ты используешь, в общем по св-вам и методам TDataSet, который является папанькой большинства "датасетов".


 
Johnmen ©   (2005-05-12 11:40) [8]

>Т.е. я запускаю фильтрацию базы,

Вот это странная фраза...
В данном случае фильтрация не процесс, а состояние. И если так чуднО использовать OnFilterRecord, то работать, как ожидается, это не будет.


 
AlexO ©   (2005-05-12 11:49) [9]

IF (TRIM(DataSet.FieldByName("Econom1").AsString)
<> "") and (TRIM(DataSet.FieldByName("Data_prikaz1").AsString) <> "")
THEN st:=st + "  " + DataSet.FieldByName("Econom1").AsString + "-" + DataSet.FieldByName("Data_prikaz1").AsString;


 
leonidus ©   (2005-05-13 10:14) [10]

>AlexO спасибо, теперь понял свою ошибку.
Спасибо всем за подсказки.


 
evvcom ©   (2005-05-13 10:19) [11]

И все же оптимальнее

str := DataSet.FieldByName("Econom1").AsString;
if (Trim(str)<>"") and ...
then st:=st+" "+str+ ...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1117622833
chili
2005-06-01 14:47
2005.06.29
Подскажите как работать с libpq.dll для 8.0?


6-1112244581
Илья
2005-03-31 08:49
2005.06.29
Операционная система


5-1088037452
xerx
2004-06-24 04:37
2005.06.29
потомок ListView


3-1115977356
Лиса
2005-05-13 13:42
2005.06.29
DBGrid+mySQL


14-1117530340
passlight
2005-05-31 13:05
2005.06.29
Новая Хронология : ваши мнения ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский