Конференция "Начинающим" » Проблема c NULL полями [D6]
 
  • Gore (14.04.08 11:26) [0]
    Есть два поля в таблице DBF которые обозначены NULL делфи не может открыть эту таблицу. Подскажите что можно сделать.
  • Sergey13 © (14.04.08 11:36) [1]
    Не понял? Два поля названы одинаково?
  • Gore (14.04.08 11:40) [2]
    нет два различных поля помечены как НУЛЛ из за них не могу из Делфи подконнектится к таблице убираю нулл можно. Как это можно сделать программно?
  • Johnmen © (14.04.08 11:41) [3]
    Почему не можешь? Откуда это видно?
  • Gore (14.04.08 11:42) [4]
    из фокса все видно прекрасно а делфи заявляет проблема с индексами. но стоит только убрать у полей галочку НУЛЛ то делфи таблицу открывает.
  • Johnmen © (14.04.08 11:44) [5]

    > а делфи заявляет проблема с индексами

    Прям так и заявляет?
  • Gore (14.04.08 11:47) [6]
    ага пишет "Corrupt table/index header"
  • Johnmen © (14.04.08 11:50) [7]
    Так убери "у полей галочку НУЛЛ".
  • Gore (14.04.08 11:52) [8]
    у меня проблема в 81 папке содержаться таблицы с которых я сливаю данные и у всех них есть эти галочки. Так что у всех не уберешь геморно. Вопрос как это сделать программно?
  • Johnmen © (14.04.08 12:01) [9]
    Что за БД? И где ты "убираешь у полей галочку НУЛЛ"?
  • Gore (14.04.08 12:02) [10]
    бд FoxPro. Галочку убираю в TABLE DESIGNER
  • Anatoly Podgoretsky © (14.04.08 12:25) [11]
    > Gore  (14.04.2008 12:02:10)  [10]

    Борланд не обещал работоспособности баз ФоксПро выше версии 2.5
  • Gore (14.04.08 13:41) [12]
    так что делать?
  • Anatoly Podgoretsky © (14.04.08 13:44) [13]
    Перейти на АДО и правильного провайдера.
  • Gore (14.04.08 13:49) [14]
    с АДО глюк  Ругается на непредвиденную ошибку драйвера внешней базы данных (8961). и DE тут не причем!
  • Gore (14.04.08 13:50) [15]
    BDE работает ровно
  • Anatoly Podgoretsky © (14.04.08 13:53) [16]
    > Gore  (14.04.2008 13:49:14)  [14]

    Это уже твоя ошибка
  • Gore (14.04.08 13:59) [17]
    В смысле?
  • Gore (14.04.08 14:00) [18]
    Он мне просто подконнектится не дает убираю все ровно
  • Anatoly Podgoretsky © (14.04.08 14:13) [19]
    Нам погадать на ромашке?
  • Gore (15.04.08 09:21) [20]
    могу скинуть код если надо
  • Gore (15.04.08 09:22) [21]
    var
     x:integer;//Счетчик для цикла папок
     z:integer;//Счетчик таблиц
     i,j,lCount: Integer;
     Patch,TekN:string;
     PatchImp,PatchExp:string;
    begin
    Patch:=ApplicationPath;
    if bsSkinSpinEdit1.Value<bsSkinSpinEdit2.Value then
    Begin
    memo3.Lines.Clear;
    BsSkinGauge1.MinValue:=0;
    BsSkinGauge1.MaxValue:=BsSKinListbox1.Items.Count-1;
    BsSkinGauge1.Value:=BsSkinGauge1.MinValue;

    for z:=0 to BsSKinListbox1.Items.Count-1 do
     begin
     //коннектимся к базе импорта
      bsSkinLabel1.Caption:=BsSKinListbox1.Items.Strings[z];
      ImpTC.Connected:=False;
      ImpTC.DefaultDir:='NewData\';
      ImpTC.Connected:=true;
    //   ImpT.DatabaseName:='C:\NewData\';
      ImpT.SQL.Text:='Select * from '+BsSKinListbox1.Items.Strings[z];
      if Memo1.Lines.Strings[z]<>'' then
        ImpT.SQL.Text:=ImpT.SQL.Text+' '+Memo1.Lines.Strings[z];
      try
      ImpT.Open;
      except
         showmessage('Konnekt proshol uspechno');
      end;
          //Циклично коннектимся ко всем базам и берем инфу
          for x:=strtoint(bsSkinSpinEdit1.Text)
              to strtoint(bsSkinSpinEdit2.Text) do
                 begin
                   Tekn:=inttostr(x);
                   ExpTC.Connected:=false;
                   ExpTC.DefaultDir:=BsSkinEdit1.Text+'\'+Tekn+'\'+BsSkinEdit2.Text;
                   ExpTC.Connected:=True;
                   ExpT.SQL.Text:='Select * from '+BsSKinListbox1.Items.Strings[z]+' '+Memo1.Lines.Strings[z];
                   memo3.Lines.add(ExpTC.DefaultDir);
                   try
                    ExpT.Open;
                    ImpT.Last;
                    ExpT.First;
                   except
                     showmessage('Konnekt proshol uspechno');
                     end;
                   lCount := ExpT.FieldCount;
                             For i:=0 to ExpT.RecordCount-1 do
                              Begin
                               ImpT.Insert;
                                for j:=0 to LCount-1 do
                                   if (not ExpT.Fields[j].IsNull)and(ExpT.Fields[j].CanModify) then
                                         ImpT.FieldByName(ExpT.Fields[j].FieldName).Assign(ExpT.Fields[j]);
                               ExpT.Next;
                              end;
                    ExpT.Close;
                    Memo3.Lines.SaveToFile('Data.txt');
                 end;
      BsSkinGauge1.Value:=BsSkinGauge1.Value+1;
     //Сохраняеми вырубаем базу импорта
      ImpT.Post;ImpT.Close;
     end;

    {for x:=strtoint(bsSkinSpinEdit1.Text)
     to strtoint(bsSkinSpinEdit2.Text) do
     begin
     //Коннект к базе и перекачка
      PatchImp:=Patch+'NewData\';
      Tekn:=inttostr(x);
      PatchExp:=BsSkinEdit1.Text+Tekn+'\'+BsSkinEdit2.Text;
        //Коннект к списку таблиц
        for z:=0 to BsSKinListbox1.Items.Count-1 do
         begin
      ImpTC.Connected:=False;
      ImpTC.DefaultDir:=PatchImp;
      ImpTC.Connected:=true;
      ExpTC.Connected:=false;
      ExpTC.DefaultDir:=PatchExp;
      ExpTC.Connected:=True;
          bsSkinLabel1.Caption:=BsSKinListbox1.Items.Strings[z];
      ImpT.SQL.Text:='Select * from '+BsSKinListbox1.Items.Strings[z];
      ExpT.SQL.Text:='Select * from '+BsSKinListbox1.Items.Strings[z]+' '+Memo1.Lines.Strings[z];
    //       ImpT.TableName:=PatchImp+BsSKinListbox1.Items.Strings[z];
    //       ExpT.TableName:=PatchExp+BsSKinListbox1.Items.Strings[z];
          memo3.Lines.add(ExpTC.DefaultDir);
          try
          ImpT.Open;ExpT.Open;
           //Копируем записи из таблицы в таблицу
           if ExpT.RecordCount>0 then ExpT.First;
           if ImpT.RecordCount>0 then ImpT.Last;
            lCount := ExpT.FieldCount;
            For i:=1 to ExpT.RecordCount do
             Begin
              bsSkinLabel2.Caption:='Номер записи '+inttostr(i);
              ImpT.Insert;
              for j:=1 to LCount do
               if (not EXPT.Fields[j].IsNull) and (EXPT.Fields[j].CanModify) then
               ImpT.FieldByName(EXPT.Fields[j].FieldName).Assign(EXPT.Fields[j]);
              ExpT.Next;
             end;
          except
      if ExpT.RecordCount>0 then ExpT.First;
           if ImpT.RecordCount>0 then ImpT.Last;
            lCount := ExpT.FieldCount;
            For i:=1 to ExpT.RecordCount do
             Begin
              bsSkinLabel2.Caption:='Номер записи '+inttostr(i);
              ImpT.Insert;
              for j:=1 to LCount do
               if (not EXPT.Fields[j].IsNull) and (EXPT.Fields[j].CanModify) then
               ImpT.FieldByName(EXPT.Fields[j].FieldName).Assign(EXPT.Fields[j]);
              ExpT.Next;
             end;
          end;
          ImpT.Post;
    //        if Impt.RecordCount>0 then ImpT.PackTable;
          ImpT.Close;ExpT.Close;
         end;
        //Коннект к списку таблиц
     //Коннект к базе и перекачка
     BsSkinGauge1.Value:=BsSkinGauge1.Value+1;
     end;
    }
    Memo3.Lines.SaveToFile('Data.txt');
    MSG1.MessageDlg('Соединение данных прошло успешно!',mtInformation,[mbOk], 0);
    end
    else
    MSG1.MessageDlg('Неверно укзан диапазон!',mtInformation,[mbOk], 0);
  • Gore (15.04.08 09:22) [22]
    тут два варианта и оба не пашут
  • Gore (15.04.08 09:23) [23]
    сейчас начал по новой вскоре скину 3 вариант
  • ЮЮ © (15.04.08 11:04) [24]
    > try
    >                ExpT.Open;
    >                ImpT.Last;
    >                ExpT.First;
    >               except
    >                 showmessage('Konnekt proshol uspechno')
    > ;
    >                 end;


    И как при таком коде можно не добиться успешного коннекта? :)
  • Gore (15.04.08 11:11) [25]
    да можно глючит ка ни в чем не бывало. Уже с 4-ми компонентами пытаюсь
  • Игорь Шевченко © (15.04.08 11:14) [26]

    >   try
    >                 ExpT.Open;
    >                 ImpT.Last;
    >                 ExpT.First;
    >                except
    >                  showmessage('Konnekt proshol uspechno');
    >
    >                  end;


    в цитатник
  • Gore (15.04.08 11:24) [27]
    что не нравиться?
  • Palladin © (15.04.08 11:42) [28]
    открыл дверь, зашел, дошел до стены, споткнулся, упал, получил сотрясение моска и всем сказал "все успешно"
  • Gore (15.04.08 12:00) [29]
    да мне без разницы что было писать лишь бы сообщение выдал при ошибке
  • Gore (15.04.08 12:18) [30]

    var
    i,j,z,k:integer;//счетчики
    DN,DC:integer;//Диапазон значений
    BS:string;//Текущая таблица
    Dir:string;//Путь к базе экспорта
    lCount:integer;//Количество столбцов
    begin
    //начало и конец диапазона
    DN:=strtoint(bsSkinSpinEdit1.Text);
    DC:=strtoint(bsSkinSpinEdit2.Text);
    //начало и конец диапазона

    //Проверка введеного диапазона
    if DN>DC then
    MSG.MessageDlg('Диапазон был указан неверно',mtInformation,[mbOk], 0)
    else
    //Диапазон верен продолжаем работу
    //Проверка на таблицы
    if SPS.Items.Count=0 then
    MSG.MessageDlg('Не указанна ни одна таблица!',mtInformation,[mbOk], 0)
    else
    //список таблиц имеется
    begin
    //Циклично коннектимся к каждой их таблиц в списке
      for i:=0 to SpS.Items.Count-1 do
      begin
       BS:=SPS.Items.Strings[i];//текущая таблица
       //Коннектимся к таблице импорта
           try
            ImpTCon.Connected:=false;
            ImpTCon.DefaultDir:='NewData\';
            ImpTCon.Connected:=true;
            ImpT.Close;
            ImpT.FoxConnect:=ImpTCon;
            ImpT.SQL.Text:='Select * from '+BS;
            ImpT.Open;
           except
            MSG.MessageDlg('Не удалось подключиться к таблице!',mtInformation,[mbOk], 0);
            break;
           end;
       //Коннектимся к таблице импорта

       //Циклично прогоняем все таблицы экспорта
       //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//
         //Получаем путь к базам данных
         if Initdir.Text[Length(Initdir.Text)]<>'\'
         then  dir:=Initdir.Text+'\' else dir:=Initdir.Text;
         showmessage(dir);
       //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//
       //Для прогресса
         Val.MinValue:=DN-1;
         Val.MaxValue:=DC;
         Val.Value:=DN-1;
       //Для прогресса

         for j:=DN to DC do
          begin
         //Коннектимся к таблице экспорта
           try
            ExpTCon.Connected:=false;
            ExpTCon.DefaultDir:=Dir+inttostr(j)+'\'+LCDir.Text;
            ExpTCon.Connected:=true;
            ExpT.Close;
            ExpT.FoxConnect:=ExpTCon;
            ExpT.SQL.Text:='Select * from '+BS;
            ExpT.Open;
            //перебрасываем данные из одной таблицы в другую
             lCount := ExpT.FieldCount;
             ExpT.First;
             For z:=0 to ExpT.RecordCount-1 do
               Begin
                ImpT.Insert;
                for k:=0 to LCount-1 do
                if (not ExpT.Fields[k].IsNull)and(ExpT.Fields[k].CanModify) then
                  ImpT.FieldByName(ExpT.Fields[k].FieldName).Value:=Expt.Fields[k].Value;
                ExpT.Next;
                ImpT.Post;
               end;
            Val.Value:=Val.Value+1;
           except
            MSG.MessageDlg('Не удалось подключиться к таблице!',mtInformation,[mbOk], 0);
            break;
           end;
         //Коннектимся к таблице экспорта если все произошло удачно
         end;
       //вырубаем таблицу импорта
       ImpT.Close;
      //Циклично прогоняем все таблицы экспорта    
      end;
    //Циклично коннектимся к каждой их таблиц в списке
    end;

    end;


    от писанный кодв чем ошибка?
  • app © (15.04.08 12:39) [31]
    > Gore  (15.04.2008 12:18:30)  [30]

    Хватит замусоривать конференцию.
  • Gore (15.04.08 13:05) [32]
    app если такой умный скажи где ошибка и закроем тогда тему сразу
  • sniknik © (15.04.08 13:09) [33]
    > да мне без разницы что было писать лишь бы сообщение выдал при ошибке
    тогда вообще ничего не пиши..., а в ошибке "по умолчанию" скрытой твоим кодом часто не только просто сообщение о том что она произошла, а еще и ее причина.

    вообще за такой идиотский код с закрытием оригинальных и подстановкой "пустышек" (по смыслу), в некоторых местах увольняют...

    > от писанный кодв чем ошибка?
    сказано еще в Anatoly Podgoretsky [11], [13]
    причина не измен6иться сколько бессмысленного кода не приводи.

    > app если такой умный скажи где ошибка и закроем тогда тему сразу
    если ты такой глупый то без толку
 
Конференция "Начинающим" » Проблема c NULL полями [D6]
Есть новые Нет новых   [134434   +28][b:0][p:0.003]