Главная страница
    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.039 c
14-1117753713
kaif
2005-06-03 03:08
2005.06.29
Почему правильно писать "класс" и неправильно писать "аддресс"?


14-1117209306
sasa123
2005-05-27 19:55
2005.06.29
требуется delphi программист


3-1115898208
-K2-
2005-05-12 15:43
2005.06.29
Проблемы при соединении с БД по локальной сети.


5-1088080642
han
2004-06-24 16:37
2005.06.29
record как published свойство


10-1094479321
Gavrila
2004-09-06 18:02
2005.06.29
"Нет доступа" при подключении к удаленному Com-серверу?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский