Сейчас на форуме: tyns777, zombi-vadim (+4 невидимых)

 eXeL@B —› Программирование —› local sql из delphi
Посл.ответ Сообщение


Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 17:21
· Личное сообщение · #1

задача такая:
обновляем таблицу через sql, причём не все записи,
а только некоторые.

в аттаче файл содержащий внутренности StringList-a
который я вставляю как sql в query, а потом execsql.

вопрос такой:
как правильно выполнить этот запрос,
вернее как правильно будет выглядеть
UPDATE для нескольких условий.

или даже так:
надо одним updat-ом обновить нужные записи
или как объеденить три updata в один

a55d_20.11.2007_CRACKLAB.rU.tgz - gfdg.txt




Ранг: 80.5 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 20 ноября 2007 17:27 · Поправил: apple
· Личное сообщение · #2

update set {}, set {}, ..., set {} Но не везде.
Или через точку с запятой 3 запроса или WHEN -- THEN или IF(,,) или хранимая процедура.
Кто на что горазд, да и под каждый движок есть какой-то оптимальный метод.

А по сути - такая "оптимизация" тебя не спасет: БД жжжуть как спроектирована.

-----
ring 0





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 20 ноября 2007 18:16
· Личное сообщение · #3

UPDATE [dbo].[Pupils]
SET [Clas] = CAST(CONVERT(INT, SUBSTRING([Clas], 1, LEN([Clas])-1)) + 1 AS VARCHAR(2)) + RIGHT([Clas], 1)
WHERE
(Familia = 'Иванов' AND Imya = 'Вася' AND Otchestvo = 'Владимирович' AND Clas = '4Г') OR
(Familia = 'Петров' AND Imya = 'Петя' AND Otchestvo = 'Николаевич' AND Clas = '10А') OR
(Familia = 'Сидорова' AND Imya = 'Маша' AND Otchestvo = 'Петровна' AND Clas = '7Д')






Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 19:04
· Личное сообщение · #4

спасибо большое, теперь хоть есть с чем сравнить,
а в хелпах только азы




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 19:06
· Личное сообщение · #5

А по сути - такая "оптимизация" тебя не спасет: БД жжжуть как спроектирована

это что значит, что-то я не допрыгиваю



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 20 ноября 2007 19:13
· Личное сообщение · #6

Как-то сталкивался я с ADO и БД в делфи, естественно много граблей было.
У разработчиков свой взгляд на понятие "работа с БД".
Статей в инете на эту тему можно поискать.
Не всё там так просто со SQL в Делфи.

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 80.5 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 20 ноября 2007 19:14
· Личное сообщение · #7

У тебя в одной таблице и ФИО, и класс, и т.п.
Лучше разнести их по разным таблицам.
Например, Таблица "классы", таблица "Ученики" и т.д. - почитай о построении реляционных БД.

-----
ring 0





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 20 ноября 2007 19:33 · Поправил: BaGiE
· Личное сообщение · #8

apple пишет:
Например, Таблица "классы", таблица "Ученики" и т.д. - почитай о построении реляционных БД.

Ну если говорить об оптимизации в данной задаче, то ну смысла заводить таблицу "классы" типа (Id INT PRIMARY KEY, ClassName VARCHAR(3)) и т.д. нет. Тут проще реализовать тип TINYINT и встроенный в программу классификатор, например 1 == "1А", 2 == "2А" и. д. Это как азбука =) А вот я бы не стал разделять ФИО на 3 разных поля а взял бы одно поле, например типа VARCHAR(192) и построил на нем некластеризованный (NONCLUSTERED) индекс. Хотя можно, конечно и сделать справочник имен, фамилий, отчеств, но хз. По-моему весьма сомнительное занятие =)

Насчет ADO. Вещь. Только ADO.NET еще круче =) Поэтому писать под этот же MS SQL 2005, например, удобнее на каком-нибудь MS Visual C# 2005 и т.д. Хотя конечно иногда ацкий .NET бесит, но в связке с MSSQL - лялька.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 19:48
· Личное сообщение · #9

вообщем помогите мне пожалуйста
какой-нить книжецей по работе Local SQL из дельфей.

apple
делал через {},короче в аттаче то как у меня сделано. (ни хотит а почему??:-] )

BaGiE
ты уловил идею, но мне надо предусматривать варианты не только типа [NUMBER+CHAR],
поэтому это я хотел сделать дельфой




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 20:04
· Личное сообщение · #10

структуру БД мне менять уже поздно, а хотя....
если не трудно дайте линк по работе с ADO, а то моего опыта программирования БД
хватило только на TQuery, короче BDE

а задача так такая:
в таблице колонки:Famlia;Imya;Otchestvo;Clas.
мне надо возможностями local sql из delphi,
оформить перевод всех учеников в следующий класс.
прежде я работал через TTable, это было елементарно, а теперь с Query...............




Ранг: 80.5 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 20 ноября 2007 21:01
· Личное сообщение · #11

BaGiE:
Ну если говорить об оптимизации в данной задаче, то ну смысла заводить таблицу "классы" типа (Id INT PRIMARY KEY, ClassName VARCHAR(3)) и т.д. нет. Тут проще реализовать тип TINYINT и встроенный в программу классификатор, например 1 == "1А", 2 == "2А" и. д. Это как азбука =)

В данном контексте - да. Однако, если смотреть шире: под классом понимается не просто цифра-буква, а, скажем, расписание уроков, учителя, а завтра понадобится разделение параллелей по направлению (соц.-гум, матем., и т.д.), после завтра еще че-нить... если заранее не спроектировать по правилам, то масштабируемости будет пшик.

-----
ring 0





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 20 ноября 2007 23:58
· Личное сообщение · #12

так есть линки у кого-нить



Ранг: 69.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 21 ноября 2007 01:02 · Поправил: userdom
· Личное сообщение · #13

По Delphi на русском можешь --> здесь <-- http://all-ebooks.com/delphi посмотреть,
или --> здесь <-- http://www.programmersclub.ru/book ,
Немного об использовании --> ADO в Delphi <-- http://megalib.com/books/62/IndexADO.htm ,
и ещё
--> (ADO) Как работать из Delphi напрямую с MS ADO (Microsoft Active Data Objects)? <-- http://informatoriy.ru/index.php5?fileId=9402




Ранг: 95.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 21 ноября 2007 07:24
· Личное сообщение · #14

ADO конечно штука не плохая, но вот если объем данных велик, то начинаются жуткие тормоза....Я на эти грабли уже наступал. Также тормоза могут начаться из-за некорректной и ненормализованной структуры БД. Я в свое время очень удачно отказался от ADO и перешел на использование ZeosDBO. Там организуется прямое общение с MS SQL сервером через ntwdblib. Кроме MS SQL поддерживаются ADO, Mysql, PostgreSQL, firebird и кое что еще. Такчто очень рекомендую посмотреть на досуге. Библиотеки ZeosDBO - opensource.

-----
бессмысленные манипуляции не становятся более разумными если их повторять





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 21 ноября 2007 08:42
· Личное сообщение · #15

userdom
спасибо большое за линки


 eXeL@B —› Программирование —› local sql из delphi
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати