Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14

Ошибка при использовании WordApplication для формирования отчета

02.08.2012, 09:13. Показов 3736. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа формирует выходной документ Word, используя для этого данные из таблиц BDE. Выходной документ имеет определенный строгий формат, и содержит текст, списки, таблицы и т.д. Формируется таблица в документе, скажем, подобным образом:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
WordApplication1.Selection.Font.Size := 8;
//ShowMessage(IntToStr(WordApplication1.Selection.End_));
a := wdWord9TableBehavior;
b := wdAutoFitFixed;
 
WordDocument1.Tables.Add(WordApplication1.Selection.Range,Tab1_3_2.RecordCount+1,6,a,b);
WordDocument1.Tables.Item(t).Columns.Item(1).Width:=20;
WordDocument1.Tables.Item(t).Columns.Item(2).Width:=130;
WordDocument1.Tables.Item(t).Columns.Item(3).Width:=130;
WordDocument1.Tables.Item(t).Columns.Item(4).Width:=70;
WordDocument1.Tables.Item(t).Columns.Item(5).Width:=70;
WordDocument1.Tables.Item(t).Columns.Item(6).Width:=70;
//WordDocument1.Tables.Item(t).Columns.Item(10).Width:=30;
 
WordDocument1.Tables.Item(t).Cell(1,1).Range.Text := '¹';
WordDocument1.Tables.Item(t).Cell(1,2).Range.Text := 'Íàèìåíîâàíèå';
WordDocument1.Tables.Item(t).Cell(1,3).Range.Text := 'Ìåñòîïîëîæåíèå';
WordDocument1.Tables.Item(t).Cell(1,4).Range.Text := 'Ïëîùàäü, êâ.ì.';
WordDocument1.Tables.Item(t).Cell(1,5).Range.Text := 'Äëèíà, ì';
WordDocument1.Tables.Item(t).Cell(1,6).Range.Text := 'Øèðèíà, ì';
Tab1_3_2.First;
i:=2;
while not Tab1_3_2.Eof do
   begin
   WordDocument1.Tables.Item(t).Cell(i,1).Range.Text :=  IntToStr(i-1);
   WordDocument1.Tables.Item(t).Cell(i,2).Range.Text := Tab1_3_2NAME.Value;
   WordDocument1.Tables.Item(t).Cell(i,3).Range.Text := Tab1_3_2PLACE.Value;
   if Tab1_3_2S.Value>0 then WordDocument1.Tables.Item(t).Cell(i,4).Range.Text := FloatToStr(Tab1_3_2S.Value) else WordDocument1.Tables.Item(t).Cell(i,4).Range.Text :='-';
   if Tab1_3_2L.Value>0 then WordDocument1.Tables.Item(t).Cell(i,5).Range.Text := FloatToStr(Tab1_3_2L.Value) else WordDocument1.Tables.Item(t).Cell(i,5).Range.Text :='-';
   if Tab1_3_2W.Value>0 then WordDocument1.Tables.Item(t).Cell(i,6).Range.Text := FloatToStr(Tab1_3_2W.Value) else WordDocument1.Tables.Item(t).Cell(i,6).Range.Text :='-';
   inc(i);
   Tab1_3_2.Next;
   end;
 
   a:=wdLine;
   b:=Tab1_3_2.RecordCount+1;
   WordApplication1.Selection.MoveDown(a,b,EmptyParam);
   if WordApplication1.Selection.Information[wdWithInTable] = true then WordApplication1.Selection.GoToNext(wdGoToLine);
   inc(t);
Последний блок вроде как должен покинуть таблицу и продолжить формирование отчета. И по большей части так оно и есть, но иногда возникает проблема. Если одна из ячеек одной из таблиц попадает на разрыв страницы (а в виду того, что данные в таблицах достаточно непредсказуемы, понять, где именно и в какой именно таблице это произойдет фактически невозможно), то курсор ввода не покидает таблицу, а оставшись в одной из ее ячеек, продолжает формирование отчета, что в общем-то в скором времени приводит либо к ошибке, либо к чудовищной ерунде в отчете начиная с этого места. Ошибка возникает случайно, примерно в 20% случаев.

Кто может подсказать, существует ли некий надежный способ уйти из таблицы? Пробую даже одновременно
Delphi
1
2
3
 a:=wdLine;
   b:=Tab1_3_2.RecordCount+1;
   WordApplication1.Selection.MoveDown(a,b,EmptyParam);
и

Delphi
1
   if WordApplication1.Selection.Information[wdWithInTable] = true then WordApplication1.Selection.GoToNext(wdGoToLine);
но безрезультатно. Последняя строчка - вроде как каноничный пример из справки, который должен перейти к следующей позиции в документе сразу после таблицы, если курсор все еще в ней - но все равно возникают ошибки. Может быть, существует еще какое-то решение проблемы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2012, 09:13
Ответы с готовыми решениями:

Ошибка формирования отчета в СКД: ошибка при попытке вычисления значения агрегатной функции
Решая свою задачку, нарыла формулу, в которой вылазит ошибка. И не могу понять.. Вот формула ВЫБОР КОГДА...

Ошибка формирования стандартного отчета
УТ 10.3 Толстый клиент. Доброго. Помогите разобраться, сломал всю голову. Стандартный отчет "Продажи" отбор по менеджеру не...

Ошибка формирования отчета excel, ошибка hresult 0xc800A03ec
использую antiti fremwork Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); ...

16
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
02.08.2012, 10:58
Не вполне уверен, что мой совет пригодится, но я в задачах подобного рада использую заранее приготовленные шаблоны, в которых макеты таблиц расставлены так, как надо. Все, что я делаю с таблицами при формировании отчетов - это вставка значений в определенные ячейки, добавление строк, при необходимости выделение и слияние ячеек и др. В шаблоне там, где это необходимо расставляю закладки. Переходом к закладке всегда легко покинуть таблицу.
Упомянутые шаблоны храню в блоб полях БД.
В вашем вопросе насторожило использование таблиц БДЕ. БДЕ само по себе никаких таблиц не имеет. Это только инструмент доступа к таблицам БД. То есть вы используете некоторую СУБД и для доступа к объектам СУБД используете БДЕ.
Считаю также нелишним сказать, что являюсь последовательным противником использования БДЕ в проектах. Это устаревший и давно никем не сопровождаемый инструмент!
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
02.08.2012, 23:14
Цитата Сообщение от Zedus Посмотреть сообщение
Программа формирует выходной документ Word, используя для этого данные из таблиц BDE. Выходной документ имеет определенный строгий формат, и содержит текст, списки, таблицы и т.д. Формируется таблица в документе, скажем, подобным образом:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
WordApplication1.Selection.Font.Size := 8;
//ShowMessage(IntToStr(WordApplication1.Selection.End_));
a := wdWord9TableBehavior;
b := wdAutoFitFixed;
 
WordDocument1.Tables.Add(WordApplication1.Selection.Range,Tab1_3_2.RecordCount+1,6,a,b);
WordDocument1.Tables.Item(t).Columns.Item(1).Width:=20;
WordDocument1.Tables.Item(t).Columns.Item(2).Width:=130;
WordDocument1.Tables.Item(t).Columns.Item(3).Width:=130;
WordDocument1.Tables.Item(t).Columns.Item(4).Width:=70;
WordDocument1.Tables.Item(t).Columns.Item(5).Width:=70;
WordDocument1.Tables.Item(t).Columns.Item(6).Width:=70;
//WordDocument1.Tables.Item(t).Columns.Item(10).Width:=30;
 
WordDocument1.Tables.Item(t).Cell(1,1).Range.Text := '¹';
WordDocument1.Tables.Item(t).Cell(1,2).Range.Text := 'Íàèìåíîâàíèå';
WordDocument1.Tables.Item(t).Cell(1,3).Range.Text := 'Ìåñòîïîëîæåíèå';
WordDocument1.Tables.Item(t).Cell(1,4).Range.Text := 'Ïëîùàäü, êâ.ì.';
WordDocument1.Tables.Item(t).Cell(1,5).Range.Text := 'Äëèíà, ì';
WordDocument1.Tables.Item(t).Cell(1,6).Range.Text := 'Øèðèíà, ì';
Tab1_3_2.First;
i:=2;
while not Tab1_3_2.Eof do
   begin
   WordDocument1.Tables.Item(t).Cell(i,1).Range.Text :=  IntToStr(i-1);
   WordDocument1.Tables.Item(t).Cell(i,2).Range.Text := Tab1_3_2NAME.Value;
   WordDocument1.Tables.Item(t).Cell(i,3).Range.Text := Tab1_3_2PLACE.Value;
   if Tab1_3_2S.Value>0 then WordDocument1.Tables.Item(t).Cell(i,4).Range.Text := FloatToStr(Tab1_3_2S.Value) else WordDocument1.Tables.Item(t).Cell(i,4).Range.Text :='-';
   if Tab1_3_2L.Value>0 then WordDocument1.Tables.Item(t).Cell(i,5).Range.Text := FloatToStr(Tab1_3_2L.Value) else WordDocument1.Tables.Item(t).Cell(i,5).Range.Text :='-';
   if Tab1_3_2W.Value>0 then WordDocument1.Tables.Item(t).Cell(i,6).Range.Text := FloatToStr(Tab1_3_2W.Value) else WordDocument1.Tables.Item(t).Cell(i,6).Range.Text :='-';
   inc(i);
   Tab1_3_2.Next;
   end;
 
   a:=wdLine;
   b:=Tab1_3_2.RecordCount+1;
   WordApplication1.Selection.MoveDown(a,b,EmptyParam);
   if WordApplication1.Selection.Information[wdWithInTable] = true then WordApplication1.Selection.GoToNext(wdGoToLine);
   inc(t);
Последний блок вроде как должен покинуть таблицу и продолжить формирование отчета. И по большей части так оно и есть, но иногда возникает проблема. Если одна из ячеек одной из таблиц попадает на разрыв страницы (а в виду того, что данные в таблицах достаточно непредсказуемы, понять, где именно и в какой именно таблице это произойдет фактически невозможно), то курсор ввода не покидает таблицу, а оставшись в одной из ее ячеек, продолжает формирование отчета, что в общем-то в скором времени приводит либо к ошибке, либо к чудовищной ерунде в отчете начиная с этого места. Ошибка возникает случайно, примерно в 20% случаев.

Кто может подсказать, существует ли некий надежный способ уйти из таблицы? Пробую даже одновременно
Delphi
1
2
3
 a:=wdLine;
   b:=Tab1_3_2.RecordCount+1;
   WordApplication1.Selection.MoveDown(a,b,EmptyParam);
и

Delphi
1
   if WordApplication1.Selection.Information[wdWithInTable] = true then WordApplication1.Selection.GoToNext(wdGoToLine);
но безрезультатно. Последняя строчка - вроде как каноничный пример из справки, который должен перейти к следующей позиции в документе сразу после таблицы, если курсор все еще в ней - но все равно возникают ошибки. Может быть, существует еще какое-то решение проблемы?
Я не понимаю зачем вы сформируйте документ на Word . Пишите это код мучить на него !!! И ВСЕ РАВНО ВАШИ ПРОГРАММА БУДЕТ {МЕДЛЕННО РАБОТАТЬ } И ПОЛЬЗОВАТЕЛЬ БУДЕТ НЕ ДОВОЛЕН .
1. Пока программа создает Word File
2. Пока программа создает таблицу
3. потом загрузить данных это займет много время

Я вам советую или FastReport или QReport
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
03.08.2012, 06:55
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Я не понимаю зачем вы сформируйте документ на Word . .....
Я вам советую или FastReport или QReport
Это вечный спор на тему кто "красивше", Поп, Попадья или Попова дочка.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
03.08.2012, 07:05
Ошибка здесь
Delphi
1
WordDocument1.Tables.Add(WordApplication1.Selection.Range
должно быть так(конечно если ты не вставляешь в определённое место)
Visual Basic
1
2
Application.ActiveDocument.Tables.Add( _
    Application.ActiveDocument.Paragraphs.Item(Application.ActiveDocument.Paragraphs.Count).Range, 3, 5)
и в конце "якобы выходим"
Visual Basic
1
Application.ActiveDocument.Paragraphs.Add
ну и потом опять создаём в цикле
0
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
06.08.2012, 03:36  [ТС]
2 SAMZ
Не вполне уверен, что мой совет пригодится, но я в задачах подобного рада использую заранее приготовленные шаблоны, в которых макеты таблиц расставлены так, как надо
К сожалению, сколько и каких будет таблиц заранее неизвестно, потому создать какой-то единый шаблон практически невозможно. Таблиц может быть до 40, и их количество и расположение в тексте сильно зависит от входных данных, так что боюсь, с шаблоном ничего не выйдет

В вашем вопросе насторожило использование таблиц БДЕ. БДЕ само по себе никаких таблиц не имеет
Сказано к тому, что исходные данные могут быть в виде таблиц разных СУБД, и в данном вопросе сама СУБД в общем-то не имеет значения. Просто передавал суть - данные для таблиц, которые будут сформированы в выходном документе, получаются из некой БД. Проблема-то в WordApplication :/

2 xxbesoxx
Я не понимаю зачем вы сформируйте документ на Word
Ключевые слова - "я не понимаю". Если не понимаете - не пишите советы. Речь идет о конкретной задаче с конкретной проблемой, но всегда найдется кто-то, кто скажет "а я бы использовал другой компонент" или "я бы вообще писал на C#" и т.д. А то, что результатом работы программы должен являться файл Word, а не QReport, и вопрос был про Word, а не QReport, видимо незаметно. Если нечего сказать - лучше промолчать.

2 Bit_Man
Спасибо, но программа написана не на VBA, а на Delphi... В Delphi "WordDocument1" фактически равен "Application.ActiveDocument" (в начале генерации отчета он ему присваивается - виноват, не указал это), механизм вставки таблиц поменять можно, но в Delphi "Application.ActiveDocument.Paragraphs.A dd" превращается в "WordApplication1.ActiveDocument.Paragra phs.Add" и требует одного параметра типа Range... Какой именно Range туда передать? (средствами Delphi) Если передаю Selection.Range - опять же выходит ерунда, но кажется эта идея уже относится к правильному пути
0
 Аватар для Игорь[Igor]
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
06.08.2012, 03:53
Попробуй сформировать отчет без таблиц, а в местах где должны быть таблица ставь метки <Tab1>, <Tab2> и т.д, а после как отчет будет сформирован вставляй нужные таблицы по нужным метка и заполняй их.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
06.08.2012, 06:24
Цитата Сообщение от Zedus Посмотреть сообщение
требует одного параметра типа Range
попробуй Range последнего параграфа

Добавлено через 3 минуты
Цитата Сообщение от Zedus Посмотреть сообщение
программа написана не на VBA, а на Delphi
это понятно я сам в Builder c++ программирую, а если что для ворда надо то лезу в VBA потом переделываю под Builder
Тут еще посмотри там так
Delphi
1
WordApplication1.ActiveDocument.Paragraphs.Add(EmptyParam);
Добавлено через 13 минут
Примерно так должно быть
Delphi
1
2
3
WordDocument1.ActiveDocument.Tables.Add(WordApplication1.ActiveDocument.Paragraphs.Last.Range,Tab1_3_2.RecordCount+1,6,a,b);
...
WordApplication1.ActiveDocument.Paragraphs.Add(EmptyParam);
Добавлено через 1 минуту
1
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
06.08.2012, 07:29  [ТС]
Спасибо, по первой ссылке есть решение! Процитирую для тех, кто возможно будет решать эту проблему после меня!

Delphi
1
2
3
4
5
6
7
Con:=7;
// Перемещаем курсор из таблицы. 
WordApplication1.Selection.MoveDown(EmptyParam,Con,EmptyParam);
// Вставляем текст.
WordApplication1.Selection.InsertAfter('текст '+#13);
// Снимаем выделение.
WordApplication1.Selection.Collapse(D);
В данном случае в "Con:=7" вместо 7 указал количество записей в таблице+шапка+1 (на случай переноса ячейки на следующую страницу). Все работает. За каждую страницу, занимаемую отдельной таблицей, лучше еще по единичке добавить - как показал только что эксперимент - MoveDown не ведет курсор дальше, если абзац кончается. Так что этот способ рабочий, в отличие от ранее использованного!
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
06.08.2012, 11:03
Zedus, Скажите, а почему перед перемещением курсора за пределы таблицы не поставить его в последнюю стоку таблицы. Например, так
Delphi
1
2
3
4
5
6
7
// это тестовый пример
MSWord:= CreateOleObject('Word.Application');
MSWord.Documents.Open(FileName := 'f:\COURTINFO\trunk\COURTCASES\CHANGELOG\CHANGE.doc');
MSWord.Visible := True;
Tbl := MSWord.ActiveDocument.Tables.Item(1);
Tbl.Cell(Tbl.Rows.Count, 1).Select;
MSWord.Selection.MoveDown(5, 2);
Я проверил, работает!
0
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
07.08.2012, 02:29  [ТС]
Потому что, как я уже писал выше, определить, какая именно строка будет последней, не выходит. Ячейки иногда дробятся при переносе страницы и возникает хаос...

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

Delphi
1
2
3
4
5
6
7
8
while WordApplication1.Selection.Information[wdWithInTable] = true do
   begin
   a:=wdLine;
   b:=1;
   WordApplication1.Selection.MoveDown(a,b,EmptyParam);
   end;
a:=EmptyParam; 
WordApplication1.ActiveDocument.Paragraphs.Add(a);
a и b - переменные типа OLEVariant. В виду того, что MoveDown меняет их значения в процессе работы, присваивать их значения приходится в теле цикла. Логика простая - пока мы находимся в таблице - двигаемся на строчку ниже.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.08.2012, 08:22
Цитата Сообщение от Zedus Посмотреть сообщение
Ячейки иногда дробятся при переносе страницы и возникает хаос
Ну и пусть себе дробятся и размножаются любым доступным способом. После того, как таблица создана
Tbl.Rows.Count
дает вам количество строк с учетом всех дроблений и размножений.
В цикле, как в приведенном Вами примере, это делать можно, но на больших таблицах получается долго.
0
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
07.08.2012, 08:41  [ТС]
Работает, когда
1. размер таблицы известен.
2. таблица не разделена разрывом страницы.

В моем случае проблемы возникали именно тогда, когда таблица занимала не одну страницу документа.

Добавлено через 1 минуту
Rows.Count, если разрыв пересек ячейку, а не между ячейками прошел, дает неверное значение
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.08.2012, 09:22
Проверил на таблице, занимающей 10 страниц с разрывами, пересекающими ячейку.
код
Delphi
1
Tbl.Cell(Tbl.Rows.Count, 1).Select;
устанавливает курсор в последнюю строку таблицы, а код
Delphi
1
MSWord.Selection.MoveDown(5, 1);
выводит курсор за пределы таблицы, независимо от разрывов
0
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
07.08.2012, 09:26  [ТС]
Проблема в том, что ошибка возникает случайно ) то есть когда в документе из 40 страниц есть 20 таблиц, из которых 6 проходит через разрыв страницы, ошибка случайно может возникнуть в любой из них. А может и не возникнуть ) Причем на одних и тех же входных данных. Я не знаю ее истинных причин...
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.08.2012, 11:08
Цитата Сообщение от Zedus Посмотреть сообщение
то есть когда в документе из 40 страниц есть 20 таблиц, из которых 6 проходит через разрыв страницы
Независимо от того, проходит ли для некоторой таблицы разрыв страницы через ячейку или нет, илспользовать везде одну и туже технологию выхода за пределы таблицы.
Цитата Сообщение от Zedus Посмотреть сообщение
ошибка случайно может возникнуть в любой из них. А может и не возникнуть ) Причем на одних и тех же входных данных
Это странно. Если нет регулярности в наступлении событий при одних и тех же данных, то это плохо и может потебовать от вас дополнительных отладочных действий
0
0 / 0 / 0
Регистрация: 02.08.2012
Сообщений: 14
08.08.2012, 02:01  [ТС]
Сам понимаю, что странно ) Но после изменения процедуры выхода из таблицы на ту, которую выше уже описал, ошибка не появляется уже второй день, когда как раньше в среднем возникала раз в час... Мистика
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.08.2012, 02:01
Помогаю со студенческими работами здесь

Ошибка формирования отчета: поле не найдено.
Всем доброе утро! Столкнулась с ошибкой формирования отчёта - Поле не найдено &quot;Поле1&quot;. Самое странное - никакого...

1c8 ошибка формирования отчета, помогите разобраться
Пожалуйста помогите разобраться. Вижду что проблема с сиквелом но не знаю в какую сторону копать - толи юзер не то что то заполнил толи еще...

Таблица для формирования отчета
В новой таблице формируется только одна 1 строка, но зато считаются все, а надо, чтобы сформировались все строки, это платцкарт, люкс, купе...

Форма для формирования отчета
Помогите пожалуйста создать форму для отчета. Мне нужно чтобы пользователь на форме задавал критерии для выбора из таблицы. Допустим чтобы...

Хранимая процедура для формирования отчета
добрый день.Люди добрые нужна помощь. имеется хранимая процедураCREATE PROCEDURE dbo.rep_Vozv_Im ( @datebegin datetime, @dateend ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru