#0
by smaharbA
Как можно отсортировать таблицу через АДО, волнует именно "физическая" сортировка данных ?
#1
by Кроки
когда-то работал с MS SQL и Oracle. Совет с тех времен, - через индексный файл. ADOCommand->Text="CREATE INDEX .. и далее".
#4
by Кроки
Читаю. Конкретизируй "физически". Ты подразумеваешь, что хочешь положить записи в таблицу одна за другой согласно условию сортировки?
#6
by Кроки
ADOCommand->Text="INSERT INTO Новая_Таблица SELECT * FROM Старая_Таблица WHERE (условие отбора)". более конкретная запись зависит от синтаксиса конкретной SQL
#7
by smaharbA
согласен Но... незабывайте про примарикей, запись "физически" будет всеравно сделана по нему и в порядке возрастания... Таблица такова, что запись в нее могу делать только при присутствии примарикея (парадокс), структуру менять немогу...
#8
by masky
>будет всеравно сделана по нему и в порядке возрастания при всем уважении - это бред делаешь первичный ключ кластерным - это физическое переупорядочивание записей.
#9
by Кроки
Тогда не SELECT *, а SELECT (поле2, поле 3,...) и INSERT модифицируется, когда будешь перечислять поля.. вроде INSERT INTO Новая_Таблица SET Новая_Таблица.Поле2=Старая_Таблица.Поле2 Т.е., перетаскиваешь без PRIMARY_KEY (если твоя БД спроектирована, что PRIMARY KEY не несет другой функциональной нагрузки кроме как id записи. А в новой таблице тебе уже создастся свой PrKey.
#10
by smaharbA
попробуй для таблиц парадокс... суть еще в том, что надо попутно поменять одну запись, поле которое участвует в примарикее
#12
by smaharbA
есть таблица парадокса, без индексов и соответственно примарикея через ADOX создаю новую, чтобы заменить как советовали , создаю с primarykey по имеющемуся полу, поле в исходной в части записей имеет значение Null, соответственно для уникальности, нахожу минимум примерно так call rec.open("select * from " & db & " order by Numeric",con ,3,3) rec.movefirst min = rec.fields.item("Numeric").value if isnull(min) then min=0 ... далее заполняю из имеющихся записей (последовательно, не запросом) и если Null то подставляю min-- результирующая таблица заполняется от минимума к максимуму, независимо от указания SortOrder можно конечно, создать еще одну и выполнить типа Но хотелось бы в одной... ....
#14
by Кроки
Весело. Везде же рекомендуют на PRIMARYKEY бросать unique_id, который уже никогда не изменяется (хмыкнул). А под прикладные нужды используются просто индексы. Но это ладно. Давай немного теории. PRIMARYKEY как правило используется для ссылок на строку (уник.ид строки таблицы). Если ты в SELECT задаешь условие отбора (сортировки), твой PRIMARYKEY используется для упорядочения записей в тех случах... вообщем, когда его нет в условии, он не используется. Если есть подходящий индекс, то используется он. Если нет ничего подходящего, БД медленно но верно перебирает всю таблицу строка за строкой. При этом, ты можешь выбирать в SELECT и PRIMARY_KEY и записывать его в другую таблицу наравне с другими строками (главное, чтобы тип совпадал). Есть сложность в разных реализациях SQL. Но это примерно правильно в общем случае.
#15
by smaharbA
Сделай с парадоксовской таблицей... ... Еще разок, суть - нужно сменить одно поле в записи, в таблице без примарикея, потому сразу стал делать еще в пятницу )) создав промежуточную таблицу, могу конечно ее сразу переписать как в исходную, но какбы вообще без промежуточной ?
#16
by masky
>Еще разок, суть Блин абрахамс, не придуривайся. расскажи что те сделать надо и чем те ALTER TABLE неканает
#17
by Кроки
модифицируй. я смотрю if isnull(min) then min=0 ты делаешь на старой таблице UPDATE Таблица SET min=0 WHERE min=NULL; INSERT INTO .... SELECT... ORDER BY(выражение);
#18
by smaharbA
еще разок - таблица парадокса, не выйдет так сделать апдейт, нужен обязательно примарикей, таковы уж особености работы адо с парадоксом... примарикей не добавить к имеющейся таблицы, проверено...
#19
by Кроки
. Если с исходной... просто UPDATE Таблица SET min=0 WHERE min Is NULL; смысла нет физически упорядочивать таблицу (как правило). Думаешь, какие запросы будут идти к таблице и создаешь просто индексы, а потом их и юзаешь. Если у таблицы будут дочерние, создавай PRIMARY_KEY аутоинк'ом (новое поле), чтобы на свою таблицу ссылаться по этому самому полю.
#20
by smaharbA
+ потому и нахожу минимум и заполняю последовательно, те записи в которых нул они в конце таблицы (всегда), по возрастанию немогу, потому, что первая запись типа 987654321 следующая 876543210 а остальные нул (порядок должен остаться прежним)
#21
by masky
Для таблиц Paradox DataBase Desktop (из Дельфей) позволяет создавать и удалять любые индексы на любом этапе, включая первичный. Условие - поля для первичного индекса должны быть первыми в списке. а значит и АДО может. но я незнаю как :(
#22
by smaharbA
если написал что есть смысл, то ненадо опроверкать... там старая прога которая читает записи по порядку и в зависимости от порядкового номера резолвит инфу, прогу менять немогу...
#23
by Кроки
Тогда INSERT в новую таблицу, где у тебя в структуре добавляется новое поле (оно же PRIMARY_KEY, оно же autoinc), а остальные поля те же самые. Сделаешь INSERT, старую таблицу удалишь, а новую переименуешь. А дальше как у тебя написано. movefirst и т.д.
#24
by smaharbA
это уже сдалано, делается через ADOX но загвоздка в промежуточной, если не смогу, то фих с ней, пущай будет промежуточная... просто думал, что в АДО есть метод типа sort (не параметр)
#25
by smaharbA
и новое поле немогу добавить, оно для примарикея в парадоксе обязательно первое, та прога так написана, что берет записи по порядку и поля по порядку (пофих ей на имена) :( уже опробовано, ладно наплевать, буду через промежуточную
#26
by Кроки
.. Гмык, старую лучше переименовать. А еще лучше, чтобы не ломать структуру: пишешь в новую, там меняешь min, из старой удаляешь все записи, и ложи туда в нужном тебе порядке.
#28
by smaharbA
не удалишь и не положишь... это Paradox, в старй нету первичного ключа, таковы уж особенности работы АДО с таблицами парадокса... уже писали, но всеже попробую, хотя непойму чем он поможет в такой долбанутой ситуации (со старой прогой)
#29
by smaharbA
Еще вопрос - возможноли с помощью АДО прочитать парадоксовскую запароленную таблицу ? Ну и записать обратно также, если возможно...
#31
by smaharbA
а чтобы старая прога из нее записи читала как это было до вмешательства... уж так прога та устроена - Первая запись - даныые о томто Вторая - о семто.. Третья - о третьем... и т.д. (записей савсем мало 5 ) и поля читает не по именам, а по порядку
#35
by spock
+32 "Driver={Microsoft Paradox Driver (*.db )}; |UID=" + UID + "; |PWD=" + PWD + "; |DriverID=538; |Fil=Paradox 5.X; |DefaultDir=" + Каталог + "; |Dbq=" + Каталог + "; |CollatingSequence=ASCII;"
#36
by smaharbA
непоможет еще разок, не доступ к базе (че там доступто, он файлы) а запароленная таблица, нету там юзера, там идет шифрование на основе пароля... ... можешь попробовать, на запороленной таблице сам...
#40
by ildus
необязательно, можно сделать и в текущей таблице перестановкой значений полей между записями (по принципу сортировки массива), но это долго
#41
by smaharbA
именно так пробовал как только начал парадоксовские таблицы зырить, не работает это, это несколько иное вот табличку могу кинуть
#42
by spock
Колонка: Numeric: [923777025] Колонка: String: [NYP] Колонка: Comment: [For DateTime/Who is owner] Колонка: Numeric: [884520961] Колонка: String: [NYP] Колонка: Comment: [Install DAte /Who install] Колонка: Numeric: [0] Колонка: String: [222-09-04] Колонка: Comment: [SecretCode;Support Phone] Колонка: Numeric: [0] Колонка: String: [10199.0001] Колонка: Comment: [Network path] Запрос к db (нач.): 17:19:06
#47
by spock
//_____________________________________________________________________________ // Процедура Сформировать Перем conn, rs, cmd; Перем conStr; conStr = "Driver={Microsoft Paradox Driver (*.db )}; |UID=admin; |PWD=jIGGAe; |DriverID=538; |Fil=Paradox 5.X; |DefaultDir=C:; |Dbq=C:; |CollatingSequence=ASCII;"; conn = CreateObject("ADODB.Connection"); conn.ConnectionTimeout = 30; conn.CursorLocation = 3; conn.ConnectionString = conStr; conn.Open; rs = CreateObject("ADODB.Recordset"); rs.ActiveConnection = conn; rs.CursorType = 1; rs.LockType = 2; cmd = СоздатьОбъект("ADODB.Command"); cmd.ActiveConnection = conn; cmd.CommandText = "SELECT * FROM system1.db"; rs = Cmd.Execute; Если rs.EOF = -1 Тогда Иначе rs.MoveFirst; Пока rs.EOF = 0 Цикл ТекЗнач = rs.Fields.Item.Value; // перебирай сам rs.MoveNext; КонецЦикла; КонецЕсли; КонецПроцедуры // Сформировать
#48
by smaharbA
--------------------------- Сервер сценариев Windows --------------------------- Сценарий: C:SETCODATgetcodat.vbs Строка: 18 Символ: 4 Ошибка: Невозможно найти устанавливаемый ISAM. Код: 80004005 Источник: Microsoft JET Database Engine --------------------------- ОК --------------------------- ... Какой устанавливать ? И откудова знания такого суперпупер пароля ? ))
#49
by spock
драйвер хоть и от MS, но он работать без BDE не будет. я понятия не имею для чего они дали возможность защищять базы данных паролем, если есть универсальный мастер-пароль :) чую, что на PGP должно быть что-то подобное :)
#52
by smaharbA
Вернее Результат ... --------------------------- Сервер сценариев Windows --------------------------- Символ: 1 Ошибка: [Microsoft][Драйвер ODBC Paradox] Внешняя таблица не имеет предполагаемый формат. Код: 80004005 Источник: Microsoft OLE DB Provider for ODBC Drivers --------------------------- ОК ---------------------------
#53
by spock
драйвер (Microsoft Paradox Driver (*.db )) хоть и от MS, но он работать без BDE не будет.
#54
by smaharbA
работает, но только с незапароленными данными Ясно, спасибо spock за инфу про мастер пароль... ... вывод такой с запароленными таблицами через адо только при установленном бде ? это не канает, вернее не всегда подойдет к задаче... Всем спасибо...
#56
by smaharbA
скажи как верно... т.е. и без БДЕ будет ? тогда я ваще в ступоре... с незапароленными через адо работает, с запароленными см ... ниче не понимаю... :(
#57
by spock
conStr = "Provider=Microsoft.Jet.OLEDB.4.0; |Jet OLEDB:Database Password=""jIGGAe""; |Data Source=C:; |Extended Properties=Paradox 5.x;";
#58
by smaharbA
--------------------------- Сервер сценариев Windows --------------------------- Сценарий: C:SETCODATgetcodat.vbs Строка: 26 Символ: 1 Ошибка: Внешняя таблица не имеет предполагаемый формат. Код: 80004005 Источник: Microsoft JET Database Engine --------------------------- ОК --------------------------- либо для --------------------------- Сервер сценариев Windows --------------------------- Сценарий: C:SETCODATgee.vbs Строка: 7 Символ: 1 Ошибка: Ошибочный аргумент. Код: 80004005 Источник: Microsoft JET Database Engine --------------------------- ОК --------------------------- ... БДЕ отсутствует
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Таблицу значений выгрузить в таблицу печатной формы
- v8: Как таблицу значений выгрузить на управляемую форму в таблицу значений?
- Как таблицу Excel передать в таблицу значений?
- ЗуП/УПП Среднесписочная численность. Знатоки хелп!
- Как правильно отсортировать таблицу после выгрузки в нее данных из запроса?
- Не получается загрузить таблицу значений во временную таблицу и выполнить запрос
В этой группе 1С
- Выгрузка базы SQL - не удается выгрузить в dt файл
- Список значений - как привязать к справочнику?
- Как можно ускорить процесс переноса остатков на начало месяца?
- Подключение ФР Штрих-ФР-Ф
- В чем отличие 1с7.7 и 1с8
- Почему пропадают остатки на ТА?
- Ошибка загрузки обработки обслуживания
- При печати этикеток, последняя цифра штрих-кода заменяется на какую-то друг
- Winamp не сворачивается, как быть
- Параметр <Фильтр> при работе с индексами xBase?
- Доступ на партнерский форум 1С. И где?
- Удаление строк из таблицы значений
- Как устранить ошибку сценария в ПолеHTMLДокумента?
- v7: 1с77. Комплексная конфигурация.
- чистка рег. сведений
- ЗУП, Больничный лист, 2 дня за счет работодателя.
- загрузка документа из файла
- поиск по первым символам в форме ТЗ
- bat-файл. Запуск 1С 8.0 УТ - запуск обмена.
- про Взаиморасчеты в УТ 10.3.1.17