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

Вниз

Почему возникает ошибка при редактировании таблицы через BDE ?   Найти похожие ветки 

 
GreySerg   (2005-06-09 11:12) [0]

Есть таблица в БД MS SQL :

if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[document]") and OBJECTPROPERTY(id, N"IsUserTable") = 1)
drop table [dbo].[document]
GO

CREATE TABLE [dbo].[document] (
[id] [int] NOT NULL ,
[name] [varchar] (8000) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[document] WITH NOCHECK ADD
CONSTRAINT [PK_document] PRIMARY KEY  CLUSTERED
(
 [id]
)  ON [PRIMARY]
GO



заполняю ее данными :

INSERT INTO document
                     (id, name)
SELECT     1, replicate("a", 255)
UNION ALL
SELECT     2, replicate("b", 255)
UNION ALL
SELECT     3, replicate("c", 256)


есть такой код доступа к таблице через BDE:


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  SetDBParams(DataBase1,"mydb.cfg");
  with Table1 do
  begin
    Exclusive := False;
    IndexFieldNames := "id";
    TableName := "document";

    Open;
    while not Eof do
    begin
      Edit;
      FieldByName("Name").Value := "34";
      Next;
    end;
  end;
end;



почему возникает возникает ошибка "Couldn"t perform the edit because another user changed the record" , при редактировании записи (когда делаю Edit), у которой количество символов в name > 255 (в данной случае на записи с id =3) ?

Можно ли это как-то исправить ?

P.S. : переход на ADO не предлагать, т.к. слишком много кода надо переделать


 
Ega23 ©   (2005-06-09 11:22) [1]

Попробуй


    while not Eof do
   begin
     Edit;
     FieldByName("Name").AsString := "34";
     Post;
     Next;
   end;


 
GreySerg   (2005-06-09 11:27) [2]

та же ошибка на Edit


 
Anatoly Podgoretsky ©   (2005-06-09 11:46) [3]

БДЕ не поддерживает строковые поля свыше 255 символов.


 
GreySerg   (2005-06-09 13:00) [4]

получается нет выхода , если использовать BDE

попробовал через BDE Tquery сделать :

  with Table1 do
  begin
    Exclusive := False;
    IndexFieldNames := "id";
    TableName := "document";

    Open;
    while not Eof do
    begin
      Query1.SQL.Clear;
      Query1.SQL.Add("Update document SET ");
      for i := 0 to FieldCount-1 do
      begin
       if (i <> 1) and (Fields[i].FieldName <> "id") then Query1.SQL.Add(",");
       if Fields[i].FieldName <> "id" then
         Query1.SQL.Add(Fields[i].FieldName + " = :" + Fields[i].FieldName);
      end;
      Query1.SQL.Add("where id =" + FieldByName("id").AsString);
      Query1.ParamByName("name").AsString := "34";

      Query1.ExecSQL;
      Next;
    end;
  end;



вроде работает , но если слегка изменить код

      s := "";
      for i:= 1 to 256 do
        S:= s + "b";
      Query1.ParamByName("name").AsString := S;



ошибок не выдает, но вставляет белиберду ,если Length(S)> 255


 
Ega23 ©   (2005-06-09 13:21) [5]

ошибок не выдает, но вставляет белиберду ,если Length(S)> 255

Потому, что это уже BLOB.


 
sniknik ©   (2005-06-09 15:06) [6]

Query1.SQL.Add("Update document SET");
 Query1.SQL.Add("Name = :Name1 + :Name2");

 s := "";
 for i:= 1 to 250 do
   S:= s + "b";
   
 Query1.ParamByName("name1").AsString := S;
 Query1.ParamByName("name2").AsString := S;

сквозь BDE проскочет, а серверу пофигу он поддерживает он сложит.



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

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

Наверх




Память: 0.46 MB
Время: 0.037 c
1-1120146273
TStas
2005-06-30 19:44
2005.07.18
Можно ли 7-ми дельфями перекопилировать приложение по Юникс?


4-1116595386
DinoRay
2005-05-20 17:23
2005.07.18
WM_COPYDATA и скрытое окно


1-1120304679
Draught
2005-07-02 15:44
2005.07.18
Edit скрытый и активный


1-1119693133
grol
2005-06-25 13:52
2005.07.18
Кнопка-компонент из 3 картинок (image ей)?


1-1119918781
Витёк
2005-06-28 04:33
2005.07.18
память





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