-
Есть два поля в таблице DBF которые обозначены NULL делфи не может открыть эту таблицу. Подскажите что можно сделать.
-
Не понял? Два поля названы одинаково?
-
нет два различных поля помечены как НУЛЛ из за них не могу из Делфи подконнектится к таблице убираю нулл можно. Как это можно сделать программно?
-
Почему не можешь? Откуда это видно?
-
из фокса все видно прекрасно а делфи заявляет проблема с индексами. но стоит только убрать у полей галочку НУЛЛ то делфи таблицу открывает.
-
> а делфи заявляет проблема с индексами
Прям так и заявляет?
-
ага пишет "Corrupt table/index header"
-
Так убери "у полей галочку НУЛЛ".
-
у меня проблема в 81 папке содержаться таблицы с которых я сливаю данные и у всех них есть эти галочки. Так что у всех не уберешь геморно. Вопрос как это сделать программно?
-
Что за БД? И где ты "убираешь у полей галочку НУЛЛ"?
-
бд FoxPro. Галочку убираю в TABLE DESIGNER
-
> Gore (14.04.2008 12:02:10) [10]
Борланд не обещал работоспособности баз ФоксПро выше версии 2.5
-
так что делать?
-
Перейти на АДО и правильного провайдера.
-
с АДО глюк Ругается на непредвиденную ошибку драйвера внешней базы данных (8961). и DE тут не причем!
-
BDE работает ровно
-
> Gore (14.04.2008 13:49:14) [14]
Это уже твоя ошибка
-
В смысле?
-
Он мне просто подконнектится не дает убираю все ровно
-
Нам погадать на ромашке?
-
могу скинуть код если надо
-
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);
-
тут два варианта и оба не пашут
-
сейчас начал по новой вскоре скину 3 вариант
-
> try
> ExpT.Open;
> ImpT.Last;
> ExpT.First;
> except
> showmessage('Konnekt proshol uspechno')
> ;
> end;
И как при таком коде можно не добиться успешного коннекта? :)
-
да можно глючит ка ни в чем не бывало. Уже с 4-ми компонентами пытаюсь
-
> try
> ExpT.Open;
> ImpT.Last;
> ExpT.First;
> except
> showmessage('Konnekt proshol uspechno');
>
> end;
в цитатник
-
что не нравиться?
-
открыл дверь, зашел, дошел до стены, споткнулся, упал, получил сотрясение моска и всем сказал "все успешно"
-
да мне без разницы что было писать лишь бы сообщение выдал при ошибке
-
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;
от писанный кодв чем ошибка?
-
> Gore (15.04.2008 12:18:30) [30]
Хватит замусоривать конференцию.
-
app если такой умный скажи где ошибка и закроем тогда тему сразу
-
> да мне без разницы что было писать лишь бы сообщение выдал при ошибке
тогда вообще ничего не пиши..., а в ошибке "по умолчанию" скрытой твоим кодом часто не только просто сообщение о том что она произошла, а еще и ее причина.
вообще за такой идиотский код с закрытием оригинальных и подстановкой "пустышек" (по смыслу), в некоторых местах увольняют...
> от писанный кодв чем ошибка?
сказано еще в Anatoly Podgoretsky [11], [13]
причина не измен6иться сколько бессмысленного кода не приводи.
> app если такой умный скажи где ошибка и закроем тогда тему сразу
если ты такой глупый то без толку