Как проверить, установлен ли драйвер OLEDB в системе?

Ваш код начинается с:

f = open('C:/movies/sample06.txt') 
for x in f: 
    line = f.readline()

Вы перебираете свой файл f построчно в цикле for. Но как только следующая строка в файле будет прочитана в x, вы прочитаете следующую в line. Поскольку вы ничего не делаете с x, эта строка теряется.

Итак, вам не нужно использовать readline() для итерации строк вашего файла. Просто сделайте:

with open('C:/movies/sample06.txt') as f: 
    for line in f: 
        print(line, end='')
        words = line.split(" ")
        print(words)
        num_words = len(words)
        print(num_words)

Обратите внимание на идиому with open...., которая гарантирует, что ваш файл закроется независимо от того, что происходит в вашем скрипте.

14
задан Karl-Otto Rosenqvist 22 September 2008 в 08:50
поделиться

5 ответов

Каждому поставщику связали GUID с его классом. Для нахождения гуида откройте regedit и ищите реестр имя поставщика. Например, поиск "провайдера OLE DB Microsoft Jet 4.0". Когда Вы находите его, копируете ключ (значение GUID) и использование, которые в реестре ищут в Вашем приложении.

function OleDBExists : boolean;
var
  reg : TRegistry;
begin
  Result := false;

  // See if Advantage OLE DB Provider is on this PC
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    Result := reg.OpenKeyReadOnly( '\SOFTWARE\Classes\CLSID\{C1637B2F-CA37-11D2-AE5C-00609791DC73}' );
  finally
    reg.Free;
  end;
end;
3
ответ дан 1 December 2019 в 14:12
поделиться

Можно получить имя поставщика ADO и проверить его в реестр в пути HKEY_CLASSES_ROOT \[Provider_Name].

2
ответ дан 1 December 2019 в 14:12
поделиться

Самый легкий путь только попытался бы установить связь при запуске и зафиксировал бы ошибку?

я подразумеваю, что Вы могли бы вернуть несколько различных ошибок в зависимости от, например, пользователь онлайн, но они - случаи, на которые необходимо смочь протестировать.

1
ответ дан 1 December 2019 в 14:12
поделиться

Я полагаю, что OLEDB возражает рассматриваемый, прокладываются под землей где-нибудь в реестре, начиная с OLEDB / ADO является решением COM. Мое предположение должно было бы видеть, можно ли найти GUID, что драйвер установлен как в реестре.

0
ответ дан 1 December 2019 в 14:12
поделиться
namespace Common {
  public class CLSIDHelper {

  [DllImport("ole32.dll")]
  static extern int CLSIDFromProgID([MarshalAs(UnmanagedType.LPWStr)] string lpszProgID, out Guid pclsid);


  public static Guid RetrieveGUID(string Provider) {
    Guid CLSID = Guid.Empty;
    int Ok = CLSIDFromProgID(Provider, out CLSID);
    if (Ok == 0)
       return CLSID;
    return null;
  }
 }
}
0
ответ дан 1 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: