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

Вниз

Как очистить BLOB поле в таблице?   Найти похожие ветки 

 
Zelius   (2003-08-19 20:02) [0]

Вобщем-то субж, но с маленькой поправкой :) Таблица видно битая и поэтому попытка очистить с помощью TField.Clear приводит к Access Violetion в IDAPI, как и любая попытка обратиться к этому полю. И вообще, можно ли такое поле очистить или придется *.MB грохать?


 
Dred2k   (2003-08-19 21:34) [1]

> как и любая попытка обратиться к этому полю

Что-то у тебя в коде не то, тут таблица не при чем.


 
Zelius   (2003-08-20 10:25) [2]


> Dred2k © (19.08.03 21:34) [1]

Чего уж тут может быть не то! Table1.Fields[i].AsString вызывает эксепшн в IDAPI :)


 
Johnmen   (2003-08-20 10:46) [3]

Код ?


 
Zelius   (2003-08-20 11:32) [4]


> Johnmen © (20.08.03 10:46) [3]

Код я уже привел: Table1.Fields[i].AsString, правда есть нюанс - первой вылезает ошибка Read Stream Error, а если ее игнорировать, то тогда уже AccessViolation в модуле idpdx32.dll.


 
Johnmen   (2003-08-20 11:37) [5]

То, что ты привел, кодом не является.


 
Zelius   (2003-08-20 11:48) [6]


> Johnmen © (20.08.03 11:37) [5]

Ок, тогда вот:


procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.First;
while NOT Table1.EOF do
begin
Table1.Next;
end;
end;

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
var
i: Integer;
s: String;
begin
for i := 0 to Table1.FieldCount-1 do
if Table1.Fields[i].DataType = ftMemo then
try
s := Table1.Fields[i].AsString;
except
on E: Exception do
begin
case MessageDlg( Format( "%s - %s at %p: %s! Repair?", [ Table1.Fields[i].FieldName, E.ClassName, ExceptAddr, E.Message]),
mtError, [mbYes,mbNo,mbCancel], 0) of
mrYes:
begin
Table1.Edit;
Table1.Fields[i].Clear;
Table1.Post;
end;
mrCancel: Abort;
end;
end;
end;
end;



 
Zelius   (2003-08-20 15:43) [7]

Any ideas, как подчистить таблицу?


 
Johnmen   (2003-08-20 15:56) [8]

Странно... Я сюда отвечал 3 часа назад, а поста нет...
Тогда повторюсь :)
1. Что ожидается, когда пытаемся в строку загнать значение мемо поля ? Притом, что БДЕ так не увидит более 255 байт...
2. Убери весь try и оставь Edit-Clear-Post. Посмотри, что получится...


 
sniknik   (2003-08-20 16:06) [9]

> Any ideas, как подчистить таблицу?

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

(здается мне что у тебя нормальная "здоровая" табличка, и ничего там удалять не надо)

но если хочется то сделай так
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.First;
while NOT Table1.EOF do begin
for i:= 0 to Table1.FieldCount-1 do
if Table1.Fields[i].DataType = ftMemo then begin
Table1.Edit;
Table1.Fields[i].Clear;
end;
Table1.Next;
end;
Table1.Post;
end;

95% за то что ошибок не будет (если только я не ошибся ;о))


 
Zelius   (2003-08-20 16:09) [10]


> Johnmen © (20.08.03 15:56) [8]

1. Почему не увидет? Должно увидеть, ведь идет нормальная работа с блоб полем! Задача такая, считать поле и проверить наличие в нем не корректных символов.
2. Ругается даже в SQL Explorer, если попробовать посмотреть мемо, и если попробовать скинуть его SQL запросом.


 
Johnmen   (2003-08-20 16:11) [11]

>Zelius © (20.08.03 16:09) [10]
>Должно увидеть, ведь идет нормальная работа с блоб полем!

Во-первых, не с блоб, а с мемо. Во-вторых, такая работа ненормальна.


 
Zelius   (2003-08-20 16:20) [12]


> Johnmen © (20.08.03 16:11) [11]

Вот выдержка из исходников - забирается все поле целиком! Никаких ограничений в 255 символов не вижу :)

function TBlobField.GetAsString: string;
var
Len: Integer;
begin
with DataSet.CreateBlobStream(Self, bmRead) do
try
Len := Size;
SetString(Result, nil, Len);
ReadBuffer(Pointer(Result)^, Len);
finally
Free;
end;
end;


 
Zelius   (2003-08-20 16:24) [13]


> sniknik © (20.08.03 16:06) [9]

попробовал как ты предложил - таже фигня! Access Violation at ... in IDPDX32.DLL. Все таки битая похоже...


 
Johnmen   (2003-08-20 16:32) [14]

>Zelius © (20.08.03 16:20) [12]

Ну ты даешь !!!
Приводишь правильный пример работы с блобами, т.е. через стримы, а у самого даже намёка на стримы нет !!! Абзац...:(


 
Zelius   (2003-08-20 16:39) [15]


> Johnmen © (20.08.03 16:32) [14]

в методе TBlobField.GetAsString все реализовано и без меня, так что мне остается только его и дернуть! можешь проверить, если мне и исходникам не веришь :)


 
Dred2k   (2003-08-20 16:53) [16]

> Johnmen © (20.08.03 16:32) [14]

Да все нормально с AsString. Сам так работаю. Все по науке ;)

== from TBlobField.AsString help ==
BlobString := MyBLOBField.AsString;

Typically, using AsString makes sense only if the BLOB contains text, such as that in a memo field component. The string data type can, however, store binary data as well. Thus, even BLOB fields for nontextual BLOB types such as ftGraphic or ftTypedBinary can use the AsString property.
== from TBlobField.AsString help ==

> Zelius © (20.08.03 16:09) [10]
>2. Ругается даже в SQL Explorer, если попробовать посмотреть мемо, и если попробовать скинуть его SQL запросом.

Вот это уже хуже. Другие таблицы с блобами-мемо этим не страдают?
Проверь. Если да, то лучше проверить версии модулей БДЕ, на вирусы тоже. Если таблицу соберешся проверять, возьми мою тулзу ( http://www.torry.net/apps/utilities/database/dbdoctor.zip), пригодится (она в лог напишет, что был за трабл с таблицей).


 
Zelius   (2003-08-20 17:13) [17]


> Dred2k © (20.08.03 16:53) [16]


> Вот это уже хуже. Другие таблицы с блобами-мемо этим не
> страдают?

Этим страдают только определенные записи! Версия 5.01 (то что пишет в Bde Admin). Вирусы недавно проверял. Причем, это происходит не только на моем компьютере.


 
Zelius   (2003-08-20 17:26) [18]


> Dred2k © (20.08.03 16:53) [16]

утилитой получилось удалить ошибочные мемо! могу я задействоать tutil32.dll в своей проге?


 
Dred2k   (2003-08-20 17:39) [19]

> Zelius © (20.08.03 17:26) [18]
Да можешь, конечно. Его инпрайз специально сделала для парадокса.
Юнит с декларациями ушел на мыло.


 
sniknik   (2003-08-20 17:41) [20]

http://info.borland.com/devsupport/bde/utilities.html#32Utility
см. раздел
Paradox Table Repair with Delphi source (Created 11/24/96, Size 148,839 bytes)
Paradox Table Repair with Delphi source (Package Version) (Size 17,624 bytes)
Paradox Table Repair (Packaged EXE) (Size 28,672 bytes)
This program will verify and rebuild Paradox version 7.x or less tables. This application is also available via BC++ 5.0 OWL and CBuilder source code.


 
Zelius   (2003-08-20 17:44) [21]


> Dred2k © (20.08.03 17:39) [19]


> sniknik © (20.08.03 17:41) [20]

спасибо! пошел разбираться :)



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

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

Наверх





Память: 0.49 MB
Время: 0.007 c
6-33717
TGrey
2003-07-09 21:45
2003.09.11
Как определить размер файла на сервере


3-33428
Доброжелатель
2003-08-22 10:43
2003.09.11
ZeosDBO


1-33586
AndreySoft
2003-08-28 11:18
2003.09.11
Как вставить в середину Edit а символ -


1-33656
Lex
2003-08-29 12:42
2003.09.11
Элементы управления на Web странице


14-33795
Vlad Oshin
2003-08-22 11:23
2003.09.11
Молоко. Из-под коровы или из магазина? Вы за какое?





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