Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Глюк базы 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
4-1115288509
Gamid
2005-05-05 14:21
2005.06.29
Стандартное окно Windows выбора папки


4-1114814453
Igor_
2005-04-30 02:40
2005.06.29
TServiceApplication и два TService


14-1117189726
Alexius
2005-05-27 14:28
2005.06.29
Помогите найти компонент!


14-1117751148
Yegorchic
2005-06-03 02:25
2005.06.29
Болгария или Чехия?


6-1112459975
Muh
2005-04-02 20:39
2005.06.29
Трабла с чатом