Главная страница
    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.047 c
14-1119723874
Иксик
2005-06-25 22:24
2005.07.18
Как легче всего доехать из Москвы в Питер?


1-1119946584
rolex
2005-06-28 12:16
2005.07.18
Как сохранить/загрузить содержимое ListView в файл?


14-1119389344
kaZaNoVa
2005-06-22 01:29
2005.07.18
Online Games, или играете ли Вы в игры?


1-1119909466
Контр
2005-06-28 01:57
2005.07.18
Почему могут не срабатывать сообщеня OnMouseEnter и OnMouseLeave?


14-1119618538
VMcL
2005-06-24 17:08
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский